我有一份预先格式化的电子表格报告,其单元格格式如下:
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 行,切换到第三个单元格中包含的值,依此类推。
它应该继续这样做,直到最后一行包含值(最后一行包含日期和时间)。
我想通过 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
希望这会有所帮助,让我知道进展如何。