[英]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,所以我想也许我使用数组来存储不完整的块并将其与完整的块进行比较,然后以这种方式插入行,但这也是一个噩梦。 所有这些都变得更糟,因为我必须遍历整个工作表,并在必要时执行此操作。 我可以编写代码,以便任何人只要提供逻辑就足够了。
如果更简单,则无需填写新插入的行。 意思是我可以将其全部留空,如下所示。 让我知道这是否有意义或需要更多信息。
其实这很简单:)
让我给您一些代码示例提示,它们不会直接回答您的问题,但会帮助您入门!
注意 :我正在使用硬编码范围进行演示。
例
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
首先使用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
例
假设您的范围是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.