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

时间:2017-06-04 00:09:25

标签: vba

与使用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))

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").CellsColumns(1).Cells