ある程度のステートメントの利用や変数の使い方が理解したところで、これからオブジェクトの操作を行います。オブジェクトにはセル、ワークシート、ブックなどがありますが、Excelでは必ず操作を行う目標物となります。それぞれのオブジェクトでの操作を覚えて、活用できるようなものにしましょう。
セル(Rangeオブジェクト)はさまざまな書式を持っています。各プロパティの値で指定することで、セルの書式を変更できます。まず、セルの表示形式を設定するプロパティを覚えましょう。また、主な表示形式に使用する記号や数値は表のとおりです。
セルの表示形式を指定……NumberFormatプロパティ
表示形式 | 意味 |
---|---|
0 | 1桁の数字を表示(桁数に満たない0も表示) |
# | 1桁の数字を表示(桁数に満たない0は表示しない) |
#,### | 3桁ごとにカンマを表示 |
yyyy | 西暦を4桁で表示 |
ee | 和暦を2桁で表示 |
m | 月を表示 |
d | 日を表示 |
aaa | 曜日を1文字で表示 |
セル内の値や書式をクリアするには以下のメソッドを使います。
セルの値をクリア……ClearContentsメソッド
セルの書式をクリア……ClearFormatsメソッド
すべてをクリア……Clearメソッド
Excelではコピーをよく利用します。それぞれのメソッドは以下のとおりです。
セルのコピー……Copyメソッド
セルの貼り付け……PasteSpecialメソッド
また、PasteSpecialメソッドには引数があり、値や書式だけを指定することもできます。引数の定数は以下の表を参照してください。
定数 | 内容 |
---|---|
xlPasteAll | すべてを貼り付ける |
xlpasteFormats | 書式だけを貼り付ける |
xlpasteValues | 値だけを貼り付ける |
上の例で最後の行にコピーモードを解除する構文が記述されています。これは、Excelでセルをコピーすると、コピー元のセル範囲に点滅する枠線が表示されるので、この状態を解除する必要があります。コピー状態を解除するには、CutCopyModeプロパティをFalseに設定します。その際のオブジェクトはアプリケーションオブジェクトとなります。
Applicationオブジェクト.CutCopyMode
取得したセル範囲のサイズ変更にはResizeプロパティを使います。このResizeプロパティは、現段階で取得しているセル範囲の左上端のセルを基準として、行数と列数を変更したセル範囲を設定します。
Rangeオブジェクト.Resize(RowSize、ColumnSize)
上の例では、比較的単純なプロシージャですが、使い方としては変数を使い、自由にセル範囲を変えられるようなものを作ります。
ユーザが自由に行数と列数を指定することで、いっきにセル範囲を指定することが可能となります。
ワークシートは行と列で構成されています。そこで、行や列を取得するプロパティを以下に記述します。
行を表す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オブジェクト専用のものです。
Excelの利用にはデータを並べ替えたり、特定のデータを抽出することもあります。セルに入力されたデータを扱うには以下メソッドを使います。
並べ替え……Sortメソッド
抽出……AdvancedFilterメソッド
指定したセルの範囲を並べ替える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メソッドです。引数を使って、結果の表示方法、検索条件指定、重複データの抽出指定などを設定します。
Rangeオブジェクト.AdvancedFilter(Action、CriteriaRange、CopyToRange、Unique)
引数 | 内容 | 省略 |
---|---|---|
Action | 抽出結果をどこに表示するかを指定 | 省略不可 |
CriteriaRange | 検索条件が入力されているセル範囲を指定 | 省略可、省略した場合は検索条件なしで抽出 |
CopyToRange | 抽出結果の抽出場所を指定 | 省略可、引数にActionにxlFilterCopyを指定したときは省略できない |
Unique | 重複データの抽出を指定 | 省略可、省略された場合はFalseが指定される |
引数Actionに指定できる定数
xlFilterInPlace……抽出を実行したセル範囲に抽出結果を表示
xlFilterCopy……抽出結果を別の場所に取り出す
この例では、検索結果をリスト内に表示させています。抽出条件はセルC1とC2で項目名と条件が入力されているセルを指定します。最後にセルA1にアクティブセルを選択させて終了しているプロシージャとなっています。並べ替えをした後は、元の状態に戻すためのプロシージャを作っておくことをお勧めします。
Sub 抽出解除()
ActiveSheet.ShowAllData
End Sub