以下是样本原始数据文件的链接 - >所需的输出http://www.datafilehost.com/d/3e0c23fb
用户“John”和“Jim”有一组唯一的列,然后是一组包含他们看到的每个广告的唯一信息的四列。因此,如果他们看到两个广告,则增加8个列。如果他们看到三个,12个等等。
我希望宏做的是确定每个人有多少套四个,创建新行,并复制人的信息(例如3个“约翰”行),并只放置一组4个广告列在每个。
样本数据应该非常清楚。
欢迎所有最佳做法和代码花絮。
答案 0 :(得分:0)
我的第一个建议是在一个单独的标签上为每个人提供他们自己的行,其中包含唯一ID和所有其他信息:
PersonID Name Age etc.
1 John 42 foo
2 Jim 17 bar
然后,不要在广告信息标签的每一行上复制John的信息,只需输入PersonID即可。在更新人员信息方面,这将使您的生活更轻松。它也是good practice。
其次,我建议您同时使用dim srcCell as Range
和dim targetCell as Range
。这样,您可以浏览源数据(使用set srcCell = srcCell.Offset(0, 1)
)并仍然跟踪数据应该粘贴到的位置。
srcCell
和targetCell
位于正确位置后,您可以targetCell.Value = srcCell.value
轻松复制该值。
例如:
Set srcCell = Worksheets("foo").Range("A1")
Set targetCell = Worksheets("bar").Range("A1")
Do While srcCell <> ""
for i = 1 to 4
targetCell.Value = srcCell.Value ' Copy the value across
set srcCell = srcCell.Offset(0, 1) ' Move srcCell along one
set targetCell = targetCell.Offset(0, 1) ' Move targetCell along one
next i
' Move targetCell to the start of the next row. targetCell.Parent is
' the WorkSheet that targetCell is on.
set targetCell = targetCell.Parent.Cells(targetCell.Row + 1, 1)
set srcCell = srcCell.Offset(0, 1)
Loop
' Now here, you'll have to move srcCell back to the start of the next row
' and do the whole thing again for the next row!
这应该让你开始。