VBA使用单元格值而不是单元格名称

VBA使用单元格值而不是单元格名称,vba,excel,Vba,Excel,我知道当我有单元格名称时,我可以选择一个范围。例如,在VBA中选择RangeA1:B30.select 是否有方法选择单元格中写入值的范围?我知道下面的代码不起作用,但你知道我的意思。范围217:216,9.选择 我想搜索一个值并指定范围,但如何才能做到这一点 我已经在网上搜索过了,但找不到解决办法。我还试图录制宏,但它只录制了带有单元格名称的代码。我是VBA新手,在其他地方找不到解决问题的方法。我希望你能理解我的意思 Public Sub TestMe() Range("1:10").

我知道当我有单元格名称时,我可以选择一个范围。例如,在VBA中选择RangeA1:B30.select

是否有方法选择单元格中写入值的范围?我知道下面的代码不起作用,但你知道我的意思。范围217:216,9.选择

我想搜索一个值并指定范围,但如何才能做到这一点

我已经在网上搜索过了,但找不到解决办法。我还试图录制宏,但它只录制了带有单元格名称的代码。我是VBA新手,在其他地方找不到解决问题的方法。我希望你能理解我的意思

Public Sub TestMe()
    Range("1:10").Cells.SpecialCells(xlCellTypeConstants).Select
End Sub
将仅选择前10行中不是公式的值:

要选择公式,请键入xlCellTypeFormulas而不是xlCellTypeConstants。请注意,如果您没有要选择的内容,它将抛出一个错误。

假设我们有:

我们想要一个值在10到20之间的范围。此代码:

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
将产生:


我认为@vityta的解决方案可以很好地选择所有具有任何价值的单元。如果您试图找到一个特定的值

在@Foxfire和Burns以及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'中的一个。

另一种方法,您只需要指定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

您需要在所有要搜索该值的单元格内循环,然后获取该单元格的地址。查看eg获取特定值的行号。谢谢!你的解决方案非常有效。祝您有个美好的一天!