Автозаполнение до следующей строки

у меня есть отформатированный отчет электронной таблицы с ячейками в формате, как показано ниже:

A           B         C        D
                               Week1 Week2
CUSTOMER A  PRODUCT A MEASURE A
                      MEASURE B
                      MEASURE C
CUSTOMER B  PRODUCT B MEASURE A
                      MEASURE B
                      MEASURE C

отчет может содержать тысячи строк. Мне нужно разобрать ячейки в Столбцах A и B, что приводит к 3 блокам ячеек, со строкой, содержащейся в первой строке блока. A2 в этом случае.

мне нужно автоматически заполнить ячейки в Столбцах A и B для достижения следующей ситуации:

CUSTOMER A PRODUCT A MEASURE A
CUSTOMER A PRODUCT A MEASURE B
CUSTOMER A PRODUCT A MEASURE C
CUSTOMER B PRODUCT B MEASURE A
CUSTOMER B PRODUCT B MEASURE B
CUSTOMER B PRODUCT B MEASURE C

значения должны быть автоматически заполнены 2 строки или до ячейки, которая содержит значение не равно значению автозаполнения. Затем это значение должно быть автоматически заполнено до следующих 2 строк, переключено на значение, содержащееся в третьей ячейке и так далее.

Он должен продолжать делать это до последней строки - 1, содержащей значения (последняя строка содержит дату и время).

Я хотел бы сделать это с помощью цикла VBA. Столбцы A, B и c всегда строки и значения из столбца D года цифры.

29
задан ᔕᖺᘎᕊ
22.03.2023 12:39 Количество просмотров материала 3293
Распечатать страницу

1 ответ

надеюсь, это то, что вам нужно. Я добавил комментарии над каждой важной строкой, чтобы вы могли отслеживать, что происходит, и вносить необходимые корректировки.

это предполагает, что данные в столбце C являются репрезентативными для строк, с которыми необходимо работать. Вы сказали, что это должно продолжаться до последней строки - 1, поскольку последняя строка содержит дату+время... ну, пока это не столбец C, содержащий дату и время, тогда все будет хорошо:

Dim myData As Range

'Set a range by figuring out the length of your data based on column C data:
Set myData = Range("C2", Range("C2").End(xlDown))

'create two blank variables that we'll use
'to store data later:
colAdata = ""
colBdata = ""

'Loop through each row in the 'myData' range:
For Each cell In myData

    'First, unmerge cells that are merged in columns A&B:
    If cell(1, -1).MergeCells = True Then cell(1, -1).UnMerge
    If cell(1, 0).MergeCells = True Then cell(1, 0).UnMerge

    'Check if column A has data, and if so, grab its value and
    'column B's value for use in the next iteration:
    If cell(1, -1).Value <> "" Then
        colAdata = cell(1, -1).Value
        colBdata = cell(1, 0).Value
    Else 'it's blank so enter the data from the row above:
        cell(1, -1).Value = colAdata
        cell(1, 0).Value = colBdata
    End If

Next

надеюсь, это поможет, позвольте мне знайте, как это происходит.

0
отвечен David 2023-03-23 20:27

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх