我知道有单元格名称时可以选择一个范围。例如VBA中的Range(A1:B30).select
。
有没有一种方法可以选择一个单元格中写入值的范围?我知道以下代码不起作用,但只有您知道我的意思。 Range(217:216,9).select
。
我想搜索一个值并指定范围,但是我该怎么做呢?
我已经在网上搜索了,但是找不到解决方案。我也尝试记录宏,但是它只记录了带有单元名称的代码。我是VBA的新手,在其他地方找不到我的问题的解决方案。我希望你能理解我的意思。
答案 0 :(得分:4)
说我们有
,我们希望该范围的值介于(包括) 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
将产生:
答案 1 :(得分:2)
Public Sub TestMe()
Range("1:10").Cells.SpecialCells(xlCellTypeConstants).Select
End Sub
仅选择前10行中不是公式的值:
要选择公式,请输入xlCellTypeFormulas
而不是xlCellTypeConstants
。请注意,如果您Select
一无所有,则会引发错误。
答案 2 :(得分:1)
另一种方法,您只需要指定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
答案 3 :(得分:0)
我认为@Vityata的解决方案可以很好地选择具有任何值的所有单元格。如果您要查找特定值,
@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'中的一个