我有一个像下面这样的数据块,我需要插入到有几千行的工作表中。
第一个问题是一些区块已经存在但不完整。最好通过示例进行说明。
在这种情况下,我缺少7010和7020的行。
在这种情况下,我只缺少7010.这都是随机的。我可以覆盖现有的块,但第二个问题是我在右边的单元格中有数据,所以显而易见的解决方案是插入与缺少的数字对应的空白行。
因为我知道块始终以7开头,所以我开始做类似的事情(数据在B列中)
If Left(Cells(Row, 2), 1) = 7 Then
If Cells(Row, 2) = 7005 Then
然后意识到这是嵌套if语句的泥潭。然后它变得棘手,因为在我插入必要的行之后,循环重复XD所以我想也许我使用数组来存储不完整的块并将其与完整的块进行比较然后插入行,但这也是一场噩梦。这一切都变得更糟,因为我必须遍历整个工作表并在必要时执行此操作。我可以编码所以如果任何人都可以提供逻辑,那就足够了。
如果更容易,我不需要填写新插入的行。意思是我可以把它全部留空,如下所示。如果这有意义或需要更多信息,请告诉我。
答案 0 :(得分: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
首先使用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