◆最大の行数・列数を求める
VBA でマクロを組む場合、セルの操作を For ループ等で廻して処理するのが一般的
だと思います。
その時に最大の行数や列数をカウントできなければ、汎用性の高いアプリケーションを
作成できません。
その方法について、いくつか紹介します。
Excelの最大行数は 64K 65,536 となっています。
以下は、A列の最後の行から上に向かって空白でないセルを探します。
Function EffectiveRow() As Long
EffectiveRow = Range("A65536").End(xlUp).Row
End Function
以下は列・行を変数にしたり、WookBook、Sheet を指定できるようにしたものです。
Function EffectiveRow_AssingColum(Col) As Long
EffectiveRow_AssingColum = Range(Col & "65536").End(xlUp).Row
End Function
Function EffectiveRow_AssingColum_No(Col) As Long
EffectiveRow_AssingColum_No = Cells(65536, Col).End(xlUp).RowEnd
Function
Function EffectiveColumn() As Long
EffectiveColumn = Cells(1, 256).End(xlToLeft).Column
End Function
Function EffectiveColumn_AssingRow_No(Row) As Long
EffectiveColumn_AssingRow_No = Cells(Row, .End(xlToLeft).Column
End Function
Function EffectiveRow_SheetSelect(Work_book,Work_sheet,xRow) As Long
EffectiveRow_SheetSelect = Workbooks(Work_book). _
sheets(Work_sheet).Range(xRow & "65536").End(xlUp).Row
End Function
上記は最大行(65536)または最大列(256)から順番に空白のセルは探す方法で、
ちょっとかったるい気がする人もいると思います。
こんな方法もあります。
Function LastCell_Address() As String
LastCell_Address = ActiveSheet.Cells.SpecialCells(xlLastCell).Address
End Function
Function LastCell_Row() As Long
LastCell_Row = ActiveSheet.Cells.SpecialCells(xlLastCell).Row
End Function
Function LastCell_Column() As Long
LastCell_Column = ActiveSheet.Cells.SpecialCells(xlLastCell).Column
End Function
この方法は欠点?があります。
example2 の Sheet1 の G26 に何か入力して、test6 を実行してください。
結果は $G$26 になります。
次に、G26 の内容を消します。[Backspase] key を押します。
test6 を実行すると、結果やはり $G$26 です。
一度「課題2マクロ」を保存してもう一度開くと元に戻ります。
こういう仕様なんでしょうが、ちょっと使いづらいですね。