こんにちは、Ryoです。
指定したワークシートで使用範囲を取得したい場合はUsedRangeプロパティを利用することで対処できます。このプロパティを活用することでワークシート上のデータ有無判定なども実行できますので、参考例を含めて書いていきたいと思います。
1.サンプル概要
例として以下の表を作成していますが、このシートに対しUsedRangeプロパティを実行してみます。
セルA1を基準として使用されているセルまでの範囲を取得しますので、例として作成した表では「A1:E21」範囲となります。
このプロパティの注意点としては「過去に書式設定やセル色設定などの操作を行ったセルは使用されたセルとして判定」されます。
例えば、上の表を作成したシートのセルG3に書式設定を行い、その後標準に戻したとしてもUsedRangeプロパティでは「使用された」判定になります。
セルG3の書式設定で「数値」とし、その後「標準」に戻します。
UsedRangeプロパティを実行すると先程のセルG3が使用されたものと判定されるので取得範囲が「A1:G21」となります。
このように過去の操作対象セルであっても検出されることを認識しておく必要があります。検出対象から外すには対象セルを列や行ごと削除すれば検出しなくなります。
以上がサンプル概要になります。
2.サンプルコード
Sub Sample1() 'アクティブシートの使用されている 'セル範囲を選択 With ActiveSheet.UsedRange .Select MsgBox "使用範囲は " & _ .Address(False, False) & " です", vbInformation End With '※過去に操作したセル(書式設定やテーマ色設定など)は ' 消したり書式等を元に戻しても使用されたセルと認識されます。 End Sub
サンプルコードはアクティブシートに対してUsedRangeプロパティでセルの使用された範囲を取得し、そのセルアドレスをメッセージボックスで表示するものです。
構文:オブジェクト.UsedRange
UsedRangeプロパティは指定するワークシートのセル使用範囲を取得するものですが、上のサンプル概要の項でも書いている通り「過去の操作対象セルも検出対象」という点に注意が必要です。
UsedRangeプロパティの類似プロパティでCurrentRegionがありますが、このプロパティは「アクティブセル領域(空白行と空白列で囲まれたセル範囲)」を取得するもので主に表全体を選択する際に利用しますので、用途に応じて使い分けると良いと思います。
◆参考:ワークシート上のデータ有無判定
UsedRangeプロパティを応用することで対象のワークシートに対しデータの有無を判定することができます。
Sub Sample2() 'アクティブシートに対しデータ有無を判定 'UsedRangeプロパティで取得した範囲がセルA1のみ、 '且つセルA1に何も入力されていなければ「未使用」判定 If ActiveSheet.UsedRange.Address = _ "$A$1" And IsEmpty(Range("A1")) Then MsgBox "未使用のワークシートです", vbInformation Else MsgBox "このワークシートは使用中です", vbInformation End If End Sub
UsedRangeプロパティの結果がセルA1のみ、且つセルA1に何も入力されていない=ワークシート上のデータなしと判定しています。
例えば何かの処理で結果を出力する際に、対象シート上のデータ有無確認などで利用できるのではないかと思います。
3.まとめ
ワークシートの使用範囲を取得するUsedRangeプロパティ、類似で表全体を選択するようなケースでアクティブセル領域を取得するCurrentRegionプロパティ、これらのプロパティは便利なので私は何かと使うことが多いです。
今回扱ったUsedRangeプロパティはシートに対して入力/未入力の判定や、データや書式設定等の使用されたセル範囲を抽出したい場合にとても有用なので知っておくと処理の幅が広がると思います。
以上、ワークシートの使用範囲を取得する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo