VBA帮助:宏以创建新行并从现有行填充数据

时间:2014-03-06 18:20:49

标签: excel vba excel-vba

以下是样本原始数据文件的链接 - >所需的输出http://www.datafilehost.com/d/3e0c23fb

用户“John”和“Jim”有一组唯一的列,然后是一组包含他们看到的每个广告的唯一信息的四列。因此,如果他们看到两个广告,则增加8个列。如果他们看到三个,12个等等。

我希望宏做的是确定每个人有多少套四个,创建新行,并复制人的信息(例如3个“约翰”行),并只放置一组4个广告列在每个。

样本数据应该非常清楚。

欢迎所有最佳做法和代码花絮。

1 个答案:

答案 0 :(得分:0)

我的第一个建议是在一个单独的标签上为每个人提供他们自己的行,其中包含唯一ID和所有其他信息:

PersonID Name Age etc.
1        John 42  foo
2        Jim  17  bar

然后,不要在广告信息标签的每一行上复制John的信息,只需输入PersonID即可。在更新人员信息方面,这将使您的生活更轻松。它也是good practice

其次,我建议您同时使用dim srcCell as Rangedim targetCell as Range。这样,您可以浏览源数据(使用set srcCell = srcCell.Offset(0, 1))并仍然跟踪数据应该粘贴到的位置。

srcCelltargetCell位于正确位置后,您可以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!

这应该让你开始。