有没有像Cell ID这样的东西?

时间:2016-10-20 14:53:18

标签: vba excel-vba macros excel

我正在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的寻址值?

非常感谢!

3 个答案:

答案 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)

要删除必须向后循环的行,这样您在循环开始时假设的行号将保持不变。