みなさん、こんにちは。
なかじ(@nakaji098)です。
前回は、CurrentRegionプロパティを使って、目的の表の範囲を取得する方法をご紹介しました。
CurrentRegionプロパティを使用することで、指定したRangeオブジェクトのアクティブセル(=空白行と空白列で囲まれたセル範囲)を取得することができます。
ただ、CurrentRegionプロパティを使用すると、表に空白行がある場合は、取得できる表の範囲が空白行の前までとなってしまいます。
そこで今回は、UsedRangeプロパティを使ってシートで使用されているセルの範囲全てを取得する方法についてご紹介していきたいと思います。
このUsedRangeプロパティを使うことで、表に空白行がある場合でも表全体の範囲を取得することができます。
CurrentRegionプロパティを使って表の範囲を取得する方法
まず、前回のおさらいとしてCurrentRegionプロパティを使って表の範囲を取得する方法を説明します。
CurrentRegionプロパティを使って表の範囲を取得
Sub 表の範囲を選択() Worksheets(1).Range("A1").CurrentRegion.Select End Sub
このようにCurrentRegionプロパティを使うことで簡単に表全体の範囲を取得することができます。
表に空白行がある場合
しかし、CurrentRegionプロパティを使って表を取得する場合に気をつけなければならない点があります。
それが表に空白行がある場合です。
Sub 表の範囲を選択() Worksheets(1).Range("A1").CurrentRegion.Select End Sub
選択されたのはA1セル~D4セルで、E行以降は選択されません。
このように表に空白行があると、選択されるのは空白行の前までになります。
CurrentRegionプロパティで表を取得するときは、表に空白行がないかに気をつける必要があります。
UsedRangeプロパティを使ってシートで使用されているセルの範囲全てを取得する方法
表の範囲を取得する方法として、別の方法もあります。
そのひとつがUsedRangeプロパティになります。
UsedRangeプロパティは、指定されたワークシートで使用されているセル範囲を返します。
具体例を挙げてみます。
まず、C4セルにのみデータが入力されて状態で実行してみます。
Sub UsedRange例() Worksheets(1).UsedRange.Select End Sub
Sub UsedRange例() Worksheets(1).UsedRange.Select End Sub
A1セル~C4セルが選択されました。
最後の例として、B2セルとD5セルにデータが入力された状態で実行します。
Sub UsedRange例() Worksheets(1).UsedRange.Select End Sub
B2セルD5セルが選択されました。
このように、UsedRangeプロパティを使うと、使用されている「最初のセルから最後のセル」のセル範囲が取得されます。
UsedRangeプロパティを使って表の範囲を取得
それでは、UsedRangeプロパティを使った表の取得方法をご紹介します。
実際にどのような動きをするか見てみましょう。
このような表にUsedRangeプロパティを実行してみます。
Sub 表の範囲を選択() Worksheets(1).UsedRange.Select End Sub
表全体の範囲が取得されました!
このように、ワークシートを指定してUsedRangeプロパティを使うだけで、表全体の範囲が取得できます。
とても便利ですね!
表に空白行がある場合
それではCurrentRegionプロパティではうまく取得することができなかった、空白行がある表の場合を見てみましょう。
Sub 表の範囲を選択() Worksheets(1).UsedRange.Select End Sub
CurrentRegionプロパティではうまく取得することができませんでしたが、UsedRangeプロパティでは空白行があっても表全体の範囲を取得することができました!
1行目と1列目が空白の場合
1行目と1列目が空白の場合でもUsedRangeプロパティを使えば、簡単に取得することができます。
Sub 表の範囲を選択() Worksheets(1).UsedRange.Select End Sub
B2セルD6セルが選択されました。
使用されている最初のセルから最後のセルのセル範囲が取得されるため、このように1行目と1列目が空白が入っていても、正しく取得することができます。
罫線が引かれている表の場合
このように大変便利なUsedRangeプロパティですが、気をつけなければいけない点もあります。
このように、あらかじめ表に罫線が引かれている場合もあると思います。
そのような場合に、UsedRangeプロパティを使うと、どのセル範囲を取得するかを見てみましょう。
Sub 表の範囲を選択() Worksheets(1).UsedRange.Select End Sub
このように、罫線が引かれている範囲すべてが選択されました。
これは「罫線が引かれている=使用されている」セルということです。
そのため、罫線が引かれている最後のセルが、UsedRangeプロパティのセル範囲の対象となってしまうのです。
また、表に関数が入力されているセルも同様に使用されているセルとなりますので、気をつけてください。
まとめ
今回は、シートで使用しているセル範囲全てをUsedRangeプロパティを使って取得する方法についてご紹介しました。
はじめに、前回ご紹介したCurrentRegionプロパティの使い方を説明しました。
CurrentRegionプロパティで取得できる表の範囲は、Rangeオブジェクトのアクティブセル(=空白行と空白列で囲まれたセル範囲)なので、空白行と空白列がある場合はうまく取得することができませんでした。
しかし、UsedRangeプロパティでは指定されたワークシートで使用されているセル範囲を取得できるため、CurrentRegionプロパティでは取得できなかった空白行がある表も取得することができました。
ただ、UsedRangeプロパティでは罫線が引かれているセルや関数が入力されているセルを取得してしまうため、その点には気をつける必要があります。