寻找一个excel的数据sortingVBA脚本。 我写了大部分内容,但是我被困在一行中

编辑:我已经更新的问题是更具体的问题是什么。 代码发布之后,我会详细介绍发生了什么问题以及我正在寻找的build议。

感谢所有迄今为止的帮助。 在这篇文章中,我会比以前更彻底。

样本数据集 数据集我看起来像这样。 列A和B包含每个人的数据,由ID代表。 C包含可用的“条目”的数量。 每个条目有四个标题。 D到G是我想要填充的单元格。

其余的行包含我们想要sorting的实际数据。 H列告诉我们是否有可用的数据。 列I再次包含相同的ID号码(与行A匹配)。 ID 505有8个条目(只显示2个),每个条目有四个标题。 我想要做的是编写一个脚本,它将首先复制这个脚本,为ID 505创build另外7行,然后将条目1的四个标题放入第一个,将条目2放入第二个,依此类推。 如果只有1个入口,则不需要再新build一行。 因为有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的原始值(接下来的几行将开始减less它)。 这是正确的方法吗? 好像脚本完全跳过了这两行,直接复制/粘贴部分。

提前致谢!

唯一的解释是ElseIf N = OriginalN Then永远不是真的,这意味着在N = Application.WorksheetFunction.CountA(Entry)中计数不会产生N 您可以将程序带入debugging器来检查。