就像使用Cells(1, 1)而不是 一样Range("A1"),在 VBA 中使用列/行索引作为范围的最佳方法是什么?
我想出了两种解决方案来表示 Range("A:A"):
Range(Cells(1, 1), Cells(Columns(1).Rows.count, 1))Union(Columns(1), Columns(1))有没有更好、更简洁的解决方案?
编辑:注意到 Tehscript 的回复并感谢您的回复。我已经尝试过,但出现以下错误:
运行时错误“13”:类型不匹配。
这是代码:
Sub tfind()
Dim r1 As Range
Set r1 = Columns(1)
MsgBox mCount("Test:", r1)
End Sub
Function mCount(find As String, lookin As Range) As Long
Dim cell As Range
For Each cell In lookin
If (Left(cell.Value, Len(find)) = find) Then mCount = mCount + 1
Next
End Function
Run Code Online (Sandbox Code Playgroud)
虽然如果第三行它工作得很好:
Set r1 = Columns(1)
Run Code Online (Sandbox Code Playgroud)
更改为:
Set r1 = Union(Columns(1), Columns(1))
Run Code Online (Sandbox Code Playgroud)
没有最好的方法来做到这一点,但是您可以根据需要使用一些方法。例如,如果您想循环遍历行和列,您应该最好使用Cells():
Sub RowTimesColumn()
Dim i As Long, j As Long
For i = 1 To 10
For j = 1 To 5
Cells(i, j) = i * j
Next j
Next i
End Sub
Run Code Online (Sandbox Code Playgroud)
另一方面,您可以根据Range("A1:B3")需要以任何一种方式引用范围。如果您只需要参考,则应该使用Range("A1:B3"). 如果您需要使用行和列,您应该更好地使用Range(Cells(1, 1), Cells(3, 2)).
这一切都与可读性和功能有关。
对于您的问题,您可能需要使用以下内容:
Range("A:A")-->Columns(1)
Range("A:C")-->Range(Columns(1), Columns(3))
编辑:您正在循环 A 列中的单元格,在这种情况下您需要使用:
Columns("A").Cells或者Columns(1).Cells