循环结束时的逻辑问题

我有一个填充string的列的电子表格。 有时有一个string的几个实例(我已经sorting,所以他们都分组在一起),所以我创build了一个macros,查看列中的当前行,确定它是否已经张贴在第二个工作表,如果有的话,它会移动到下一行,如果它没有发布它,然后继续前进。

它完美的工作,直到完全忽略最后一个条目的结尾。 最后一项是其中有几个相同的string的情况之一,所以问题几乎肯定不是它只是忽略最后一行。

无论重复多less次,它都完全无视最后一个条目。 新vba,所以任何帮助表示赞赏。

Sub RCFS() Dim ProfCtr As String Dim S2FreecellH As Long Dim ProfCenCellH As Long S2FreecellH = 3 ProfCenCellH = 2 ProfCtr = Cells(ProfCenCellH, 4) Worksheets("Sheet2").Cells(S2FreecellH, 1).Value = ProfCtr While IsEmpty(Cells(ProfCenCellH, 4).Value) = False If Cells(ProfCenCellH, 4).Value <> ProfCtr Then Worksheets("Sheet2").Cells(S2FreecellH, 1) = ProfCtr S2FreecellH = S2FreecellH + 1 ProfCtr = Cells(ProfCenCellH, 4) ProfCenCellH = ProfCenCellH + 1 Else ProfCenCellH = ProfCenCellH + 1 End If Wend End Sub 

事实上,即使您到达空单元格,您的循环仍然需要冲刷ProfCtr的值。 您可以通过在您的If条件(添加+ 1 )中向前看一行来使其工作。

还包括其他一些改进:

 Do While Not IsEmpty(Cells(ProfCenCellH, 4).Value) If Cells(ProfCenCellH + 1, 4).Value <> ProfCtr Then Worksheets("Sheet2").Cells(S2FreecellH, 1) = ProfCtr S2FreecellH = S2FreecellH + 1 ProfCtr = Cells(ProfCenCellH, 4) End If ProfCenCellH = ProfCenCellH + 1 Loop 

让我看看我是否有这个权利

  ' Stop when you reach an empty cell While IsEmpty(Cells(ProfCenCellH, 4).Value) = False ' If the cell's value matches the variable ProfCtr then ' ignore it and move to the next row. If Cells(ProfCenCellH, 4).Value <> ProfCtr Then ' But if it -doesn't- match, then copy the variable ' ProfCtr to Sheet 2. Worksheets("Sheet2").Cells(S2FreecellH, 1) = ProfCtr ' Increment your rows S2FreecellH = S2FreecellH + 1 ' Set the next bit of text to copy ProfCtr = Cells(ProfCenCellH, 4) ProfCenCellH = ProfCenCellH + 1 Else ProfCenCellH = ProfCenCellH + 1 End If 

在复制到Sheet2之前Prof Ctr = Cells(ProfCenCelH, 4)您不应该设置Prof Ctr = Cells(ProfCenCelH, 4)吗?

trincot有正确的答案。 这是一个替代技术,使用内置的方法,将完成相同的任务。

 With Worksheets("Sheet1") .Range("D1", .Range("D" & .Rows.Count)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheet2.Range("A1"), Unique:=True End With