与使用Cells(1, 1)
而不是Range("A1")
一样,在VBA中使用列/行索引作为范围的最佳方法是什么?
我想出了两个表示范围(“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
虽然如果第3行可以正常工作:
Set r1 = Columns(1)
更改为:
Set r1 = Union(Columns(1), Columns(1))
答案 0 :(得分:3)
没有最好的方法可以做到这一点,但有些方法可以根据您的需要使用。例如,如果要循环遍历行和列,最好使用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
另一方面,您可以根据需要以任一方式引用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