如何在VBA中使用列/行索引作为范围

cur*_*ous 5 vba

就像使用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)

Teh*_*ipt 6

没有最好的方法来做到这一点,但是您可以根据需要使用一些方法。例如,如果您想循环遍历行和列,您应该最好使用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