Автозаполнение до следующего ряда не пусто
У меня есть предварительно отформатированный отчет электронной таблицы с ячейками, отформатированными как ниже:
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 блока ячеек со строкой, содержащейся в первом ряду блока. А2 в этом случае.
Мне нужно автозаполнить ячейки в столбцах 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 и далее, являются числами.
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
Надеюсь, это поможет, дайте мне знать, как это происходит.