我正在Excel中编写一个宏,它应该删除整行,或根据输入添加行。
现在要删除的行数应该根据已经存在的行数来确定,所以如果我有12行和附近的一个单元格,并且Sum值为3,我已经使用了Cell值,所以远来确定要删除的行数。
|1(A1)| Title (B1)
|1(A2)| Title (B2)
|1(A3)| Title (B3)
|3(A4)| Sum (B4)
以下是我正在使用的代码(删除部分,还没有进一步说明):
If CInt(TextBox2.Value) = Cells(4, 1) Then
MsgBox ("Values are equal")
ElseIf CInt(TextBox2.Value) < Cells(34, 2) Then
a = Cells(4, 1) - CInt(TextBox2.Value)
For i = 1 To a
Rows(1).EntireRow.Delete
Next
End If
问题我所知道的是,如果我删除一行,我用来确定要删除的行数的Summation Cell将会移动,所以它不会是在位置(4,1)(:: A4::)了。
我的问题:有没有办法使用ID永远不会的单元格 更改,还是动态更改Cell的寻址值?
非常感谢!
答案 0 :(得分:2)
如果设置对单元格的引用并删除上面的单元格以使单元格向上移动,则单元格引用将相应更新。请参阅以下示例:
Function testCellRef()
Dim c As Range, i As Long
Set c = [A18]
For i = 1 To 10
Range("A" & i).EntireRow.Delete
Debug.Print "Deleted row " & i & ", cell Address is now " & c.Address
Next i
End Function
将显示在即时窗口中:
Deleted row 1, cell Address is now $A$17
Deleted row 2, cell Address is now $A$16
Deleted row 3, cell Address is now $A$15
Deleted row 4, cell Address is now $A$14
Deleted row 5, cell Address is now $A$13
Deleted row 6, cell Address is now $A$12
Deleted row 7, cell Address is now $A$11
Deleted row 8, cell Address is now $A$10
Deleted row 9, cell Address is now $A$9
Deleted row 10, cell Address is now $A$9
请注意,最后一次迭代,删除的行(第10行)位于跟踪的单元格下方,因此地址不会发生变化。
另请注意,如果用[A17]替换[A18],您将删除带有跟踪单元格的行,然后在第9次迭代时引用将变为无效,并在c.Address
调用时生成错误。
答案 1 :(得分:1)
您每次都可以使用以下内容找到包含Sum公式的行:
Columns("A").Find("=SUM", , xlFormulas, , xlRows, xlPrevious).Value
这将搜索A列,从最后一行开始并进行处理,并返回包含&#34; = SUM&#34;的单元格的值。如果您有多个单元格,则可能需要更改方向或转到另一条路线。
另一种选择是添加一个变量,如下例所示:
x = 0
If CInt(TextBox2.Value) = Cells(4 + x, 1) Then
MsgBox ("Values are equal")
ElseIf CInt(TextBox2.Value) < Cells(34 + x, 2) Then
a = Cells(4 + x, 1) - CInt(TextBox2.Value)
For i = 1 To a
Rows(1).EntireRow.Delete
x = x - 1
Next
End If
我假设您还需要更改您在B列中比较的单元格。添加行时,只需使用x = x + 1
。
答案 2 :(得分:0)
要删除必须向后循环的行,这样您在循环开始时假设的行号将保持不变。