Rには限界があり、その後、いくつかの定義された範囲である場合:
nLastRow = r.Rows.Count + r.Row - 1
MsgBox ("last row " & nLastRow)
nLastColumn = r.Columns.Count + r.Column - 1
MsgBox ("last column " & nLastColumn)
nFirstRow = r.Row
MsgBox ("first row " & nFirstRow)
nFirstColumn = r.Column
MsgBox ("first column " & nFirstColumn)
numrow = r.Rows.Count
MsgBox ("number of rows " & numrow)
numcol = r.Columns.Count
MsgBox ("number of columns " & numcol)
EDIT#1:
これは任意の範囲で動作します、コンパクトまたは離れている。範囲が完全に空の場合でも機能します。 しかし、範囲に多数のセルがある場合、サブは非常に遅くなります。:
Sub SlowAgony()
Dim myrange As Range, r As Range, nLastColumn As Long
Set myrange = Union(Range("C1:C100"), Range("G1:G100"))
nLastColumn = 0
For Each r In myrange
If r.Column > nLastColumn Then nLastColumn = r.Column
Next r
MsgBox nLastColumn
End Sub
EDIT#2:
この方法は迅速である:
Sub ytrewq()
Dim r As Range, addy As String, ary
Dim nLastColumn As Long, rr As Range
Set r = Selection
addy = r.Address(0, 0)
If InStr(1, addy, ",") = 0 Then
nLastColumn = r.Columns.Count + r.Column - 1
Else
ary = Split(addy, ",")
nLastColumn = 0
For Each a In ary
Set rr = Range(a)
If rr.Columns.Count + rr.Column - 1 > nLastColumn Then
nLastColumn = rr.Columns.Count + rr.Column - 1
End If
Next a
End If
MsgBox nLastColumn
End Sub
最後ルーチンは互いに素範囲のコンパクトな構成部品を検査します。
Visual Basicエディタで、手動で何をしているのかを記録します。終了すると録音を停止し、マクロに移動して、今録音したマクロを編集します。そこでは、あなたが手動で行ったことを行うための関連コードを見ることができます。 – dinotom
私はExcelのレコード機能を認識しています。しかし、これを使用して列番号を返す方法を私に見せる方法はありません。 – Corus
'lastCol = ws.Cells(1、ws.Columns.count).End(xlToLeft).Column'? – findwindow