引用另一个工作表中的单元格。动态/可变

时间:2010-08-17 03:24:30

标签: excel excel-vba vba

我有一个关于在其他工作表中引用单元格的问题。 我在VBA中得到了这段代码:

如果Application.CountIf(.Rows(Lrow),'8000')= 0且Application.CountIf(.Rows(Lrow),'9000'))= 0则.Rows(Lrow).Delete

我可以删除没有单词8000和9000的任何行。 但是,由于将来会有更新,我如何调整代码以使excel执行的值可以是“DYNAMIC”(即不是硬核) 比方说,如果我在SHEET 1中的单元格(17,2)处输入一个数字,那么我可以通过VBA查看单元格地址而不是SHEET 2中的“绝对值”吗?

感谢。

2 个答案:

答案 0 :(得分:0)

您可以在已有的代码上方添加这几行。这假设你想要通过将它们输入单元格B17或B18来改变它们。

Dim lowerBound as Long, upperBound as Long
lowerBound = Sheet1.Range("B17").Value
upperBound = Sheet1.Range("B18").Value

然后用lowerBound替换'8000',用upperBound替换'9000'。

答案 1 :(得分:0)

您可以在源表中添加一列X,标题为“Condx for DELETE”,并使用表示DELETE条件的公式填充此列作为布尔值 - 就像您的情况一样:= NOT(OR = A2 = 8000, A2 = 9000))(假设值8000,9000等出现在A列中)

然后循环通过源表并删除列X为TRUE的所有记录。假设

  • 您的来源已在VBA中定义为范围对象(MyRange)
  • 第一行是标题行
  • 标题和列表末尾之间的第一列中没有空单元格
  • 条件见第3栏
一个purger可能看起来像这样

Sub MySub()
Dim MyRange As Range, Idx As Integer, MyCondx As Integer

    Set MyRange = ActiveSheet.[A1]      ' represent source data as a range
    Idx = 2                             ' asuming one header row
    MyCondx = 3                         ' asuming condition is in 3rd column

    Do While MyRange(Idx, 1) <> ""
        If MyRange(Idx, MyCondx) Then
            MyRange(Idx, 3).EntireRow.Delete
        Else
            Idx = Idx + 1
        End If
    Loop
End Sub

通过这种方式,您可以完全透明,无需硬编码,并且您可以非常灵活地不仅可以更改一组2个值,还可以指定为业务提供的任何条件。

希望有所帮助 - 祝你好运