wrote :: 2005.12.15

トップページ > Excel > VBA > 講座:セルの操作 > セル範囲の取得

セル範囲の取得

■操作の対象セル範囲が不定の場合

ここまでの解説では、操作の対象を「セルA1に…」とか「セル範囲A1:C3に…」などと簡単に決めてきました。もちろん解説なのですから、それは勘弁していただきたいのですけど……実際のマクロ作成では操作の対象を特定することに苦労するものです。たとえば、次のようなデータを考えてみましょう。



このデータをマクロでクリアします。ただし、データが何行何列あるかは、そのときによって異なります。セルをクリアするにはRangeオブジェクトのClearContentsメソッドを使います。次のコードはセル範囲A1:D5をクリアします。

Sub Sample1()
    Range("A1:D5").ClearContents
End Sub

クリアすべきセル範囲の左上はセルA1です。したがって、セルD5の位置を取得できれば、上のコードと同じようにクリアできそうです。
VBAに慣れていない方なら、次のように考えるかもしれません。
A列を下方向に調べてデータが入力されている最終行を調べ、同じように1行目を右に見ていきデータの終わりを調べ、それぞれの数値からアドレスを作って……もちろん、その方法でも可能です。ですが、けっこう大変ですよ。その方法でやってみましょうか。

Sub Sample2()
    Dim r As Long, c As Long, i As Long, LastCellAddress As String
    For i = 2 To 100
        If Cells(i, 1) = "" Then
            r = i
            Exit For
        End If
    Next i
    For i = 2 To 100
        If Cells(1, i) = "" Then
            c = i
            Exit For
        End If
    Next i
    LastCellAddress = Chr(64 + c) & r
    Range("A1:" & LastCellAddress & "").ClearContents
End Sub

試してみましたが、一応クリアはされるようです。しかし、For Nextステートメントで空欄セルに行き当たったら、Exit Forでループを抜けるテクニックや、文字コードから文字列へ変換するChr関数、文字列と""(ダブルコーテーション)を結合する方法など、VBAのビギナーには少々荷が重いのではないでしょうか。

■まずExcelの機能を覚えよう

困りました……困ったときはマクロ記録です(^_^)
ですが、記録する操作に注意しなければなりません。たとえば、セル範囲A1:D5を選択して[Delete]キーを押す操作を記録してもダメです。

Sub Macro1()
    Range("A1:D5").Select
    Selection.ClearContents
End Sub

上のようなコードが記録されてしまいます。これでは役に立ちません。今必要なのは、セル範囲A1:D5をクリアするコードではなく、セルA1から始まって、データが入力されている全てのセルをクリアする操作です。こんなときは次のように操作します。

(1)アクティブセルをセルA1に移動します。
(2)[Ctrl]キーと[Shift]キーを押しながら[End]キーを押します。
(3)セル範囲A1:D5が選択されますので[Delete]キーを押してクリアします。

この操作を記録したコードです。

Sub Macro2()
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.ClearContents
End Sub

Excelでは、[Shift]キーを押しながらアクティブセルを移動すると、移動した範囲が選択状態になります。さらに、Excelでは、[Ctrl]キーを押しながら[End]キーを押すと、そのシートで使用されている範囲の右下にアクティブセルが移動します。したがって、アクティブセルを現在使用しているセルの左上(セルA1)に置いた状態で、[Ctrl]+[Shift]+[End]キーを押すと、現在使用しているセル範囲が自動的に選択されるのです。この操作をマクロ記録します。何度も書きますが、マクロをマスターしようと思ったら、まずExcelの機能に精通するべきです。Excelの機能を理解しないでマクロなんか作れません。難解なVBAを学習するよりも、Excelのショートカットキーを覚える方がはるかに簡単です。

もうひとつ方法があります。Excelでは、[Ctrl]+[Shift]+[*]キーを押すと、アクティブセルを含むデータ範囲を自動的に選択できます。データ範囲とは、空白セルに挟まれたデータの固まりです。アクティブセルをセルA1に移動して、この操作をマクロ記録してみましょう。

Sub Macro3()
    Selection.CurrentRegion.Select
    Selection.ClearContents
End Sub

SpecialCellsやCurrentRegionはヘルプで調べてください。それぞれ、どんな動作をするか分かった上でヘルプを読むのですから、理解するのも難しくないでしょう。


[セルのコピー]戻る← | →進む[セルの検索]