(連続したデータの右端のセル)を調べたい場合がけっこうあると思います。
個人的には表の最後のセルを調べる(移動する)VBAマクロは良く使います。
どういう時に使うかと言うと、たとえば、ユーザーフォームでテキストの
入力フォームを表示させ、そこにデータを入力させて、
その入力されたデータを表の最後に追加したりとか。
また、最新のデータが表の一番右にある場合などに瞬時に
最後のデータを取り出したり、データの最後にカーソルを移動させたりできます。
このように複雑な処理をやりたい場合に、連続したデータの最後を調べる処理は
結構使います。それでは、表の指定した行(連続したデータ)の最終列を調べる
VBAの記述です。(連続したデータの右端のセルを調べるVBAの記述です。)
[記述例] 表の指定した行の最終列を調べるVBA記述
Sub test() '変数の宣言(とりあえずVariant型) Dim r As Variant '基準行の表(連続したデータ)の最終列を調べる r = Range("A1").End(xlToRight).Column 'メッセージボックスで結果を表示 MsgBox "基準行のいちばん右端のセルは、" & r & " 列目です。" End Sub[動作とプログラムの説明]
最初に、結果を代入して表示する時に使う変数rの宣言をしています。
私の方では表の大きさは分からないのでVariant型で宣言しています。
表の大きさが分かっているならば、型を適切なものに変えて構いません。
変数の適切な宣言は、メモリの節約になりますので。
次に表の指定した行の最終列を変数のrに代入します。
ここで注意して欲しいのは、連続したデータの右端の列数が代入される
ということです。連続したデータの途中で空白があると、
空白行の1つ前、つまりデータが途切れたセルが最後の列と見なします。
Range("A1")のところの「A1」は、指定する行(起点となるセル)です。
ここを実際に自分が調べたい行(起点となるセル)のセルに変えて下さい。
End(xlToRight).Columnのところは、連続したデータ(行)の最後という意味です。
(「Column」は行の指定です。)
今回のVBA記述は、表の左から、連続したデータの右端まで移動する
(調べる)ものですが、応用で、表の右から調べることもできます。
もし連続したデータの途中にどうしても空白列(空白セル)ができて
しまう場合は、表のいちばん右から左方向に移動(調べる)ことで、
表の最後を確実に調べることができます。Excel2003の場合だと、
最大列数は256列、Excel2007やExcel2010の場合だと、最大列数は、
16384列なります。なので、以下のような記述をします。
[記述例] 表の指定した行の最終列をいちばん右から調べるVBA記述
Sub test() '変数の宣言(とりあえずVariant型) Dim r As Variant '基準行の表(連続したデータ)の最終列を調べる r = Cells(1, 256).End(xlToLeft).Column 'メッセージボックスで結果を表示 MsgBox "基準行のいちばん右端のセルは、" & r & " 列目です。" End Subこの場合、先の記述例では、
End(xlToRight).Columnだったのが、
End(xlToLeft).Columnになっていますので、注意して下さい。
「xlToRight」が右に向かって移動(調べる)、
「xlToLeft」が左に向かって移動(調べる)ことを意味しています。
Cells(1, 256)の「256」は、Excel2003での最大列数256列の「256」です。
つまり、1行目256列目から左に向かって調べています。
Excel2007やExcel2010の最大列数は16384列ですので、
Excel2007やExcel2010の場合は、
Cells(1, 16384)にすると、表のいちばん右側(最大列数16384列の「16384」)の
セルから左に向かって調べることになります。