我需要帮助在Excel-VBA中构build一个循环

我有一个像下面的数据块,我需要插入到数千行的表。

在这里输入图像说明

第一个问题是,有些区块已经在那里,但不完整。 这是用例子最好的说明。

在这里输入图像说明

在这种情况下,我缺less7010和7020的行。

在这里输入图像说明

在这种情况下,我只是失踪了7010,全是随机的。 我可以覆盖现有的块,但第二个问题是,我有单元格中的数据右侧,所以显而易见的解决scheme是插入与缺less数字相对应的空白行。

因为我知道块总是以7开始,所以我开始做类似的事情(数据在B列)

If Left(Cells(Row, 2), 1) = 7 Then If Cells(Row, 2) = 7005 Then 

然后意识到这是嵌套的if语句的泥潭。 然后它变得更加棘手,因为插入必要的行后,循环重复XD,所以我想也许我使用一个数组来存储不完整的块,并将其与完整的块进行比较,然后插入行,但这也是一场噩梦。 这一切都变得更糟,因为我必须遍历整个表格,并在必要时做到这一点。 我可以编写代码,如果任何人都可以提供逻辑,那就足够了。

如果更容易,我不需要填写新插入的行。 这意味着我可以把它全部留空。 让我知道这是否有道理或需要更多的信息。

在这里输入图像说明

其实这很简单:)

让我给你一个代码示例提示,不会直接回答你的问题,但会让你开始!

注意 :我正在使用硬编码范围进行演示。

  1. 循环第一个程序段并检查第二个程序段中是否存在。

 Dim BlockA As Range, BlockB As Range Dim aCell As Range Set BlockA = Range("M1:M10") Set BlockB = Range("A1:A100") For Each aCell In BlockA If Application.WorksheetFunction.CountIf(BlockB, aCell.Value) > 0 Then Debug.Print "Match Found for " & aCell.Value Else Debug.Print "Match Not Found for " & aCell.Value End If Next 
  1. 如果不是那么简单地将它添加到块的结尾

首先使用THIS查找最后一行,然后在写入之前简单地增加它。

 LastRow = Sheet1.Range("A" & Sheet1.Rows.Count).End(xlUp).Row + 1 '~~> aCell is the cell which is not there in the 2nd block Range("A" & LastRow).Value = aCell.Value 
  1. 最后根据第1列对第二个完整块进行sorting。 数字右边的空白行将被自动创build:)

假设你的范围是从A1:F100那么你可以使用这个进行sorting

 With Sheet1 .Columns("A:F").Sort Key1:=.Range("A2"), _ Order1:=xlAscending, _ Header:=xlYes, _ OrderCustom:=1, _ MatchCase:=False, _ Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal End With