今回はUsedRangeプロパティです
これは使用済のセル範囲を選択する機能です
以前にも似た機能がありましたね
CurrentRegionプロパティです
詳細はこちらです
http://okheeoffice.com/study-vba/0019
CurrentRegionプロパティは
アクティブセル範囲を返します
UsedRangeプロパティは
使用したセル範囲を返します
そして
大きな違いは
CurrentRegionプロパティが
Rangeオブジェクトに属し
UsedRangeプロパティは
Worksheetオブジェクトに属します
これはリファレンスの引用です
左側上部を見てください
・・・>Excel VBAリファレンス >オブジェクトモデル>Worksheetオブジェクト
のUsedRangeプロパティ
・・・>Excel VBAリファレンス >オブジェクトモデル>Rangeオブジェクト
のCurrentRegionプロパティ
となっています
オブジェクトは階層構造で下部に
メソッドやプロパティを持っています
分類先が違うという事は
働きや効果が違うということです
CurrentRegionはセルに対して
働きかけるものであり
UsedRangeはシートに対して
働きかけるものです
ちょっと難しい話ですが
階層構造を意識して違いを
イメージして下さい
似かよった結果が得られる機能ですが
働き先が違うので作業手順も違います
細かな条件設定も違ってきます
これらの違いは
働きかける物(オブジェクト)の違いから
生まれるものです
それではリファレンスを読みましょう
Worksheet.UsedRange プロパティ (Excel)
オブジェクトを返すプロパティです
指定されたワークシートで使われたセル範囲
(Range オブジェクト) を返します
値の取得のみ可能です
構文
式.UsedRange
式 Worksheet オブジェクトを表す変数です
https://msdn.microsoft.com/ja-jp/library/office/ff840732.aspx
ここでのポイントは上記赤文字部分です
指定されたワークシートとありますので
ワークシートを指定することは必須条件です
また
使われたセル範囲なので
Specialcellsのように特定の条件は
設定できません
選択される範囲は
Ctrl+Endで選択される最終セルと
最初に選択したセルで囲まれる範囲になります
実際に動かして確認しましょう
これはCurrentRegionで使ったものです
同じものをUsedRangeで動かしてみます
同じ結果になりました
ではCurrentRegionがうまく動かなかったケースで
試してみます
指定したセルが選択範囲内になかったので
正しく動かなかった例です
同じものをUsedRangeで動かしてみます
UsedRangeでは正しく動いています
この違いは
CurrentRegionが
セルに対して働きかけるので
指定セルが選択範囲内にないと
エラーになります
UsedRangeは
シートに対して働きかけるので
エラーにならないのです
ただし
UsedRangeでも
どのシートを選択しているかを
明示することを確実にしましょう
その方が汎用性を高めます
あと1つ実験します
これはCtrl+Endで使ったものです
CurrentRegionとUsedRangeで
試してみます
CurrentRegionの結果です
UsedRangeの結果です
CurrentRegionとUsedRangeの違い
わかりましたね
僕はUsedRangeをよく使用しますよ