编辑:我已经更新了问题,以便更具体地说明问题所在。在发布代码之后,我会详细说明出现了什么问题以及我正在寻找的建议。
感谢目前为止提供的所有帮助。我在这篇文章中会比以前更加彻底。
我的数据集看起来像这样。 A列和B列包含每个人的数据,由ID编号表示。 C包含可用于它们的“条目”的数量。每个条目有四个标题。 D到G是我想要填充的单元格。
其余行包含我们要排序的实际数据。 H栏告诉我们是否有可用的数据。第I列再次包含相同的ID号(与行A匹配)。 ID 505有8个条目(仅显示2个),每个条目有4个标题。我想要做的是编写一个脚本,首先复制,为ID 505再创建7行,然后将Entry 1的四个标题放入第一个,将Entry 2放入第二个,依此类推。只有1个Entry,没有必要换新行。因为有400个ID,有些有36个条目,所以我试图让它尽可能自动化。之前的方法是让我编写一个包含1000行的脚本,将每个条目定义为单独的Dim,使用If Entry7 <> "" and Entry 8 = "" Then
之类的语句,然后是复制和粘贴8行的特定指令。然而,这将是一个非常长的脚本。
到目前为止,我的内容如下:
Sub EntrySort()
Dim i As Long, k As Long, N As Long, Entry As Range, Rng As Range
i = 2
While i <= 400
Set Entry = Range("K" & i)
For k = Columns("K").Column To Columns("GB").Column Step 5
Set Entry = Union(Entry, Cells(i, k))
Next k
Set Rng = Range("D" & i)
N = Application.WorksheetFunction.CountA(Entry)
'count the number of entries for each ID'
If Rng.Offset(, 4) = False Then
i = i + 1 'skip IDs with no data'
ElseIf N = 1 Then
Rng.Offset(, 7).Resize(, 4).Copy
Rng.PasteSpecial Paste:=xlPasteValues
i = i + 2
ElseIf N <> 1
For X = 1 N
Rng.Offset(, -3).Resize(, 670).Copy
Rng.Offset(1, -3).Insert Shift:=xlDown
'This should create the number of rows required, based on the number of entries
Next X
Else
Rng.Offset(, 7 + 5 * N).Resize(, 4).Copy
Rng.Offset(N, 0).PasteSpecial Paste:=xlPasteValues
'after the new rows are made, this should copy the data from each entry and past it into its own row.'
N = N - 1
End If
N = N - 1
Wend
End Sub
问题似乎存在于X to OriginalN... Next
陈述中。我希望它重复制作一个新行N次,但是当我执行这段代码时,它似乎跳过了那一部分。这是正确的注释吗?我使用OriginalN作为整数,因为N的原始值(接下来的几行将开始减少它)。这是正确的方法吗?似乎脚本完全跳过这两行并直接进入复制/粘贴部分。
提前致谢!
答案 0 :(得分:2)
唯一的解释是ElseIf N = OriginalN Then
永远不会成立,这意味着在N = Application.WorksheetFunction.CountA(Entry)
中,计数永远不会产生N
。您可以将程序带入调试器以进行检查。