トップ > スキル : アプリケーション > VBA for Excel > 応用編(オブジェクトの操作1)

VBA_EXCEL

オブジェクトの操作

ある程度のステートメントの利用や変数の使い方が理解したところで、これからオブジェクトの操作を行います。オブジェクトにはセル、ワークシート、ブックなどがありますが、Excelでは必ず操作を行う目標物となります。それぞれのオブジェクトでの操作を覚えて、活用できるようなものにしましょう。

セルの操作

1.表示形式の変更

セル(Rangeオブジェクト)はさまざまな書式を持っています。各プロパティの値で指定することで、セルの書式を変更できます。まず、セルの表示形式を設定するプロパティを覚えましょう。また、主な表示形式に使用する記号や数値は表のとおりです。

  セルの表示形式を指定……NumberFormatプロパティ

表示形式 意味
0 1桁の数字を表示(桁数に満たない0も表示)
# 1桁の数字を表示(桁数に満たない0は表示しない)
#,### 3桁ごとにカンマを表示
yyyy 西暦を4桁で表示
ee 和暦を2桁で表示
m 月を表示
d 日を表示
aaa 曜日を1文字で表示

2.値や書式のクリア

セル内の値や書式をクリアするには以下のメソッドを使います。

  セルの値をクリア……ClearContentsメソッド

  セルの書式をクリア……ClearFormatsメソッド

  すべてをクリア……Clearメソッド

3.セルのコピーと貼り付け

Excelではコピーをよく利用します。それぞれのメソッドは以下のとおりです。

  セルのコピー……Copyメソッド

  セルの貼り付け……PasteSpecialメソッド

また、PasteSpecialメソッドには引数があり、値や書式だけを指定することもできます。引数の定数は以下の表を参照してください。

定数 内容
xlPasteAll すべてを貼り付ける
xlpasteFormats 書式だけを貼り付ける
xlpasteValues 値だけを貼り付ける

上の例で最後の行にコピーモードを解除する構文が記述されています。これは、Excelでセルをコピーすると、コピー元のセル範囲に点滅する枠線が表示されるので、この状態を解除する必要があります。コピー状態を解除するには、CutCopyModeプロパティをFalseに設定します。その際のオブジェクトはアプリケーションオブジェクトとなります。

CutCopyModeプロパティ

Applicationオブジェクト.CutCopyMode

4.セル範囲のサイズ変更

取得したセル範囲のサイズ変更にはResizeプロパティを使います。このResizeプロパティは、現段階で取得しているセル範囲の左上端のセルを基準として、行数と列数を変更したセル範囲を設定します。

Resizeプロパティ

Rangeオブジェクト.Resize(RowSize、ColumnSize)

上の例では、比較的単純なプロシージャですが、使い方としては変数を使い、自由にセル範囲を変えられるようなものを作ります。

ユーザが自由に行数と列数を指定することで、いっきにセル範囲を指定することが可能となります。

5.行と列を取得

ワークシートは行と列で構成されています。そこで、行や列を取得するプロパティを以下に記述します。

  行を表すRangeオブジェクトを取得……Rowsプロパティ

  列を表すRangeオブジェクトを取得……Columnsプロパティ

利用例 意味
Rows("1:3") 1行から3行を取得する
Rows すべての行を取得する
Range("A1:C5").Rows(2) セル範囲A1からC5の2行目であるA2からC2を取得する
Columns("A:C") A列からC列を取得する
Columns すべての列を取得する
Range("A1:C5").Columns(2) セル範囲A1からC5の2列目であるB1からB5を取得する

上の例は、項目数を取得するためのプロシージャです。セルA1からアクティブな領域の範囲で、行数をカウントして、そこから1を引いています。これは表の一番上が項目名だからです。そして、そのカウントした数値をセルD2の値にするように記述されています。
通常、Excelの行数を数えることが多いのですが、列に関してはセルの幅を調整することが多いです。そこで、列幅の調整をするプロシージャを紹介します。

行高や列幅を自動調整するにはAutoFitメソッドを使用します。上の例では、すべての列幅が自動調整されます。もし、限定された行や列を自動調整するのであればカッコに行数や列数を指定します。例えば3行だけであればRows(3).AutoFit、3列だけであればColumns(3).AutoFitなどと指定します。もちろん、ある範囲を指定することも可能です。(Rows("1:3").AutoFitなどと記述すれば、1行目から3行目まで自動調整)

また、行や列を非表示にすることができますが、非表示するにはHiddenプロパティを使います。ただ、非表示した後に表示することの設定しておくことが必要でしょう。そこで、表示の切り替えをするプロシージャを紹介します。

HiddenプロパティにTrueを設定すると非表示に、Falseだと表示が設定されます。このプロパティは、行や列を表すRangeオブジェクト専用のものです。

6.ソートと抽出

Excelの利用にはデータを並べ替えたり、特定のデータを抽出することもあります。セルに入力されたデータを扱うには以下メソッドを使います。

  並べ替え……Sortメソッド

  抽出……AdvancedFilterメソッド

指定したセルの範囲を並べ替えるSortメソッドには引数があり、並べ替えるフィールド、昇順・降順、先頭見出しの有無などを指定します。

Sortメソッド

Rangeオブジェクト.Sort (Key1、Order1、Key2、Order2、Key3、Order3、Header)

引数 内容 省略
Key1~3 並べ替え対象となるフィールドを指定 Key2、Key3は省略可
Order1~3 昇順の定数はxlAscending
降順の定数はxlDescending
省略可、省略の場合は昇順
Header 先頭行が見出しの場合の定数はxlYes
先頭行が見出しでない場合の定数はxlNo
省略可、省略の場合はxlNoが指定

上の例では、セルA2を含むアクティブセル領域の並べ替えで、並べ替える基準のフィールドはセルC2で、昇順、見出し行ありで行う設定となっています。つまり、タイムの小さい順に並べ替えることになります。

次に条件の合うデータだけを抽出する例を見てみます。
指定したセル範囲からデータを抽出するのはAdvancedFilterメソッドです。引数を使って、結果の表示方法、検索条件指定、重複データの抽出指定などを設定します。

AdvancedFilterメソッド

Rangeオブジェクト.AdvancedFilter(Action、CriteriaRange、CopyToRange、Unique)

引数 内容 省略
Action 抽出結果をどこに表示するかを指定 省略不可
CriteriaRange 検索条件が入力されているセル範囲を指定 省略可、省略した場合は検索条件なしで抽出
CopyToRange 抽出結果の抽出場所を指定 省略可、引数にActionにxlFilterCopyを指定したときは省略できない
Unique 重複データの抽出を指定 省略可、省略された場合はFalseが指定される

引数Actionに指定できる定数

  xlFilterInPlace……抽出を実行したセル範囲に抽出結果を表示

  xlFilterCopy……抽出結果を別の場所に取り出す

この例では、検索結果をリスト内に表示させています。抽出条件はセルC1とC2で項目名と条件が入力されているセルを指定します。最後にセルA1にアクティブセルを選択させて終了しているプロシージャとなっています。並べ替えをした後は、元の状態に戻すためのプロシージャを作っておくことをお勧めします。