#excel #vba
#excel #vba
Вопрос:
Я смог закодировать макрос, который выполняет следующее:
- скопируйте столбец A в столбец B в формате «мм-дд-гггг».
- скопируйте столбец A в столбец C в формате «h: mm».
Теперь мне нужно сделать следующее, но я не знаю как…
- Скопируйте вновь созданные столбцы B, C и каждый отдельный столбец справа от новых столбцов в их собственные отдельные книги. Я бы хотел, чтобы книги назывались на основе «текущего заголовка листа» и каждого отдельного имени строки 2. В качестве примера я прикрепил изображение данных книги и то, как будет выглядеть конечный продукт на 1 листе.
Я думаю, что код должен был бы выполнить следующее: создать переменную столбца X и строку 2 на основе диапазона. Затем укажите, что для каждого столбца X, если строка 2 содержит значение, затем скопируйте столбец B, столбец C и текущий столбец X. Затем вставьте (3) столбца (B, C и переменную столбца X) в новую книгу и назовите книгу на основе «заголовок текущего листа имя ячейки текущего столбца X, строка 2».
Я ценю чью-либо помощь, пожалуйста, дайте мне знать, если то, что я говорю, сбивает с толку, и я постараюсь прояснить это.
Изображения:
Данные: изображение данных
Конечный продукт 1: изображение конечного продукта 1
Конечный продукт 2: изображение конечного продукта 2
Текущий макрос:
Sub Time_Series()
Dim CurrentSheet As Worksheet
With CurrentSheet
Range("A:A").Copy
Range("B:C").Insert
Range("B:B").NumberFormat = "mm-dd-yyyy;@"
Range("C:C").NumberFormat = "h:MM;@"
End With
End Sub
Комментарии:
1. к вашему сведению, форматирование всего столбца занимает большой размер файла, я думаю, поэтому вы можете более конкретно определить диапазон, в котором вы хотите установить формат, например
Range(Range("B2"), Range("B2").End(xlDown)).NumberFormat = "mm-dd-yyyy;@"
, также форматирование не приведет к удалению неиспользуемой части даты, поэтому, если вы когда-либо сортируете / группируете и т. Д., Что вы видите через for at маска — это только часть фактического содержимого ячейки.2. При подходе к решению проблемы ваша логика кажется убедительной, попробуйте реализовать это.
set ws = Thisworkbook.worksheets.add
создаст для вас новую рабочую книгу и, используя подобную логикуRange(Range("B2"), Range("B2").End(xlDown)).copy destination:= ws.range("a1")
, произведет копирование3. Мне невозможно понять, потому что то, что вы объясняете, не соответствует тому, что показывают изображения. Только в одном примере вы говорите о копировании / вставке дат столбца A в столбец B, но на изображениях, которые я вижу, вы вставили их в столбец A на другом листе. Знаете ли вы разницу между рабочим листом и рабочей книгой? . Постарайтесь быть осторожными в своих объяснениях, каждое слово имеет значение, если вы хотите, чтобы мы поняли. Упростите и избавьтесь от всей ерунды.
4. Просто хотел начать с того, что я ценю время каждого. В идеале я хотел бы иметь возможность вставлять данные в новую книгу, а не в рабочий лист, потому что позже я буду импортировать отдельные книги в другую программу. Первые два шага создают столбцы B и C. Цель состоит в том, чтобы затем скопировать столбцы B, C и переменную X в новые отдельные книги для каждой переменной X. Пример Скопируйте столбец (B, C, D) в новую книгу и сохраните новую книгу как «Заголовок текущего листа-DMA-1». В следующем примере будет скопирован столбец (B, C, E) в новую книгу с именем «Заголовок текущего листа-DMA-2». И так далее.
Ответ №1:
Я думаю, что вы говорите о копировании данных с листа на лист, правильно? Рабочие книги относятся к скрытым файлам Excel. Рабочие книги содержат 1 или более листов (это вкладки внизу).
Я бы посоветовал вам просто выполнить форматирование текста вручную в столбце рабочего листа. Выделите нужные столбцы (вы можете щелкнуть заголовок столбца, чтобы выбрать весь столбец), затем щелкните правой кнопкой мыши и выберите формат ячеек. Вы можете форматировать ячейки, используя определенный формат, выбрав правильную категорию. Например, Date имеет несколько различных доступных опций. Если ни один из них не подходит для вас, выберите Пользовательский, а затем введите форматирование, которое вы хотите использовать. То же самое касается времени.
Если я правильно понимаю, вы хотите скопировать два новых столбца в их собственный рабочий лист. Если у вас есть только заданное количество дополнительных столбцов, вам следует просто вставить соответствующий лист в рабочую книгу вручную. Это можно сделать динамически, но выполнение этого вручную позволяет вам называть листы и намного проще определить, какой лист активен.
Предполагая, что у вас есть лист с именем NewSheet и что команды копирования и вставки работают (я их не тестировал)…
Выберите диапазон, как вы делали в своем примере кода…
CurrentSheet.Activate 'Make sure you've got the sheet in focus
CurrentSheet.Range("A:A").Copy 'Grabs your column data
А теперь перейдите к другому листу.
NewSheet.Activate 'this brings the other sheet into focus
NewSheet.Range("A:A").Insert 'Inserts whatever you have in the clipboard from your previous copy
Если у вас еще нет созданных листов (вкладок), вам придется создать новый лист, а затем использовать другие ссылки, чтобы перейти к ним для внесения изменений. Например…
worksheets("NewSheet").range("A:A").Insert 'Where NewSheet is the name shown on the tab at the bottom of the Spreadsheet
Кроме того, следует помнить одну вещь: программа записи макросов Excel действительно отлично подходит для записи того, что вы хотите сделать. Нужно просто знать, что вы хотите сделать, нажать кнопку записи, а затем скопировать и вставить код. Устройство записи макросов записывает код, который он генерирует, в модуль. Затем вы можете взять его и изменить, как вам нужно.
Комментарии:
1. Я опубликовал ответ под другими комментариями, разъясняющими, что я имел в виду. Но мне нужно, чтобы данные были скопированы в отдельные книги, потому что эти книги затем будут импортированы в другую программу. Возможно ли это?
2. Да. Вы можете создавать новые файлы (рабочие книги) либо вручную, либо с помощью макроса. Просто используйте macro recorder для записи процесса. Затем вы можете изменить то, что он создает, так, как вам нужно.