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