繁体   English   中英

我需要帮助在Excel-VBA中建立循环

[英]I need help building a loop in Excel-VBA

我有一个类似下面的数据块,我需要将其插入具有数千行的工作表中。

在此处输入图片说明

第一个问题是某些块已经存在但不完整。 最好用示例说明。

在此处输入图片说明

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

在此处输入图片说明

在这种情况下,我只想念7010。这都是随机的。 我可以覆盖现有的块,但是第二个陷阱是我在右侧的单元格中有数据,因此显而易见的解决方案是插入与缺失的数字相对应的空白行。

因为我知道该块始终以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列对第二个完整块进行排序。 数字右边的空白行将自动创建:)

假设您的范围是A1:F100那么您可以使用它进行排序

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM