【问题标题】:VBA using cell values instead of cell namesVBA 使用单元格值而不是单元格名称
【发布时间】:2018-07-23 13:38:11
【问题描述】:

我知道当我有单元格名称时我可以选择一个范围。例如 VBA 中的 Range(A1:B30).select

有没有办法选择单元格中写入值的范围?我知道以下代码不起作用,但只有您知道我的意思。 Range(217:216,9).select

我想搜索一个值并指定范围,但我该怎么做?

我已经在网上搜索过,但找不到解决方案。我也尝试记录宏,但它只记录了带有单元名称的代码。我是 VBA 新手,在其他地方找不到我的问题的解决方案。我希望你能明白我的意思。

【问题讨论】:

  • 您需要在要搜索该值的所有单元格内循环,然后获取该单元格的地址。
  • 看看WorksheetFunction.Match Method 例如获取特定值的行号。

标签: vba excel


【解决方案1】:

假设我们有:

我们想要值介于(包括)1020 之间的范围。这段代码:

Sub RangeFromValues()
    Dim v1 As Long, v2 As Long
    Dim r1 As Range, r2 As Range, rng As Range

    v1 = 10
    v2 = 20
    Set r1 = Range("A:A").Find(what:=v1, after:=Range("A1"))
    Set r2 = Range("A:A").Find(what:=v2, after:=r1)

    Set rng = Range(r1, r2)
    rng.Select
End Sub

将产生:

【讨论】:

  • 谢谢!您的解决方案完美无缺。祝你有美好的一天!
【解决方案2】:
Public Sub TestMe()
    Range("1:10").Cells.SpecialCells(xlCellTypeConstants).Select
End Sub

将仅选择前 10 行中不是公式的值:

要选择公式:键入 xlCellTypeFormulas 而不是 xlCellTypeConstants。请注意,如果您对Select 没有任何内容,则会引发错误。

【讨论】:

    【解决方案3】:

    另一种方法,您只需指定x(下限)、y(上限)和rngTest(您希望选择单元格的范围):

    Sub Test()
        Dim x As Long, y As Long
        Dim rngTest As Range
        Set rngTest = Range("A1:J20"): x = 5: y = 10
        Call RangebyValue(x, y, rngTest)
    End Sub
    Private Sub RangebyValue(ByVal x As Long, _
                             ByVal y As Long, _
                             ByVal rngTest As Range)
        Dim vArr(), i As Long, j As Long, rngSelect As Range
        vArr = rngTest.Value
        For i = LBound(vArr, 1) To UBound(vArr, 1)
            For j = LBound(vArr, 2) To UBound(vArr, 2)
                If vArr(i, j) >= x And vArr(i, j) <= y Then
                    If Not rngSelect Is Nothing Then
                        Set rngSelect = Union(rngSelect, rngTest.Cells(i, j))
                    Else
                        Set rngSelect = rngTest.Cells(i, j)
                    End If
                End If
            Next j
        Next i
        rngSelect.Select
    End Sub
    

    【讨论】:

      【解决方案4】:

      我认为@Vityata 的解决方案可以很好地选择所有具有任何价值的单元格。如果你想找到一个特定的值,

      在@Foxfire 和 Burns And Burns 之后, 我建议在这些单元格中使用循环。 例如:

      Sub findTheNine()
          Dim rng As Range
          For Each rng In Range("I7:L11")
              If rng.Value = 9 Then
                  rng.Select
              End If
          Next rng
      End Sub
      

      但是,这只会选择您想要查找的 '9' 之一

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-23
        相关资源
        最近更新 更多