みなさん,こんにちは。
シンノユウキ(shinno1993)です。
今回は「管理栄養士のためのVBA入門」の第3回,以下の記事の続きです。
前回はメッセージボックスを表示させるプログラムを書いてみましたが,今回はExcelシートのセルを操作するためのプログラムを書いてみましょう。セルに値を入力してみたり,セルの値を使用して計算してみたりします。
では,行きましょう!
前回の演習問題の答え合わせ
まずは前回の演習問題の答え合わせからやっていきましょう。実際の問題は以下の通りです。
答えは以下の通りです:
Sub 演習2()
MsgBox ("Hello World!")
End Sub
特段難しいことはないですよね。MsgBox関数は,引数に文字列を指定することで,その文字列をメッセージボックスとして表示させることができます。
セルに値や色を設定してみよう!
ではさっそく,セルに値を入力していきましょう。
ですがその前に,簡単に「オブジェクト」と「プロパティ」という概念について勉強しておきましょう。
オブジェクトとプロパティ
オブジェクトというのは,ExcelVBAのプログラミングにおいては,ワークシートやセル,グラフや図形などの,Excel上に存在する対象物すべてのことを指します。セルA3というのもオブジェクトですし,シート:Sheet1というのもオブジェクトです。
また,プロパティというのは,オブジェクトの属性や状態のことです。例として,以下のようなワークシートとセルがあったとしましょう。
セルB2には「123」という値が入力されていますよね。この場合,セルB2がオブジェクト,プロパティが「123」となります。セルにおける値もプロパティの一種なのですね。
同様に,セルB3にはプロパティとして「テスト」という値が設定されています。また,フォントの色として「赤色」がプロパティに設定されています。値だけでなく,フォントの色もプロパティの一種となります。
VBAで使ってみる
実際にVBAを使用して,上のようなシートになるように値を設定したり,フォントの色を設定したりしてみましょう。以下のようになります。
Sub lesson()
Range("B2").Value = 123
Range("B3").Value = "テスト"
Range("B3").Font.Color = vbRed
End Sub
すこし難しそうに見えますが,オブジェクトとプロパティの関係を理解しておくと,決して難しくありません。VBAプログラミングにおける,オブジェクトとプロパティとの関係は以下のようになっています。
オブジェクトに,プロパティをピリオドでつなぎ,=で代入します。なおここでのイコールは,右辺と左辺が同じという意味ではなく,右辺を左辺に代入という意味で用いられます。
2行目では,Range("B2")というオブジェクトのValueプロパティに,123という値を設定しています。セルの値は,VBAでは「Value」プロパティという情報として格納されているのですね。こうすることで,セルB2に123という値が設定されます。
3行目も2行目と同様にRangeオブジェクトのValueプロパティを設定しています。
4行目も同じようなことをしていますが,これについては少し説明が必要かもしれません。ここではセルB3というオブジェクトのFontプロパティを利用し,Fontオブジェクトを取得,FontオブジェクトのColorプロパティを設定しています(少し複雑ですね…)。右辺のvbRedがVBAにおける赤色を指しており,フォントの色を赤色に変えるステートメントとなります。複雑なようですが,分解して考えてみると良さそうですね。
セルの値を使って計算してみよう!
次はセルの値を使って計算してみましょう。次のシートを見てください。
このシートで,セルB2の値とセルB3の値の合計をセルB4に設定してみましょう。
もちろん暗算でもできますし,Excel上で数式を使っても簡単にできますが,VBAでやってみましょう。簡単なコードができるようになっていきましょう。実際のコードは以下のようになります:
Sub lesson()
Range("B4").Value = Range("B2").Value + Range("B3").Value
End Sub
このコードでは,右辺で合計を計算し,左辺に代入しています。これも直感的に理解できるでしょうか。右辺で値プロパティを取得して,それをプラスしています。オブジェクト.プロパティで,そのプロパティを取得できるのですね。四則演算も,Excelで数式を利用する際と同じ記号で大丈夫です。
記号 | 例 | |
---|---|---|
足す | + | 2 + 1 |
引く | - | 2 - 1 |
掛ける | * | 2 * 1 |
割る | / | 2 / 1 |
RangeではなくCellsを使ってみよう!
これまで,オブジェクト:セルを取得する際にはRangeを使用してきました。しかし,Rangeでのセルの取得には,セル範囲を文字列("A1"など)で入力しなくてはならず,不便な場面もあります。特に,これから繰り返し処理などを記述していく際には,Rangeでセルを取得していくのは難しくなります。
そこで,文字列でセルを取得するRange関数に対して,数字でセルを取得するCells関数が用意されています。行番号と列番号を指定することで使用することができます。
列番号は,A列を1とし,右に1ずつ増えていきます。すなわちB列は2,Z列は26です。最初はややこしく感じるかもしれませんが,繰り返し処理などの複雑な処理を行うようになると,いちいちAやBなどの文字列で列を指定するのではなく,列番号で指定したほうが楽に感じられるようになりますので,今のうちから慣れておきましょう。
では,先ほどお示ししたコードを,Rnage→Cellsに変えて書き直してみましょう。以下のようになれば正解です。
Sub lesson()
Cells(4, 2).Value = Cells(2, 2).Value + Cells(3, 2).Value
End Sub
演習問題
以下の表をExcelシートのA1にコピーし,zの値を求めてください。ただし,Range関数ではなく,Cells関数を用いてセルの値を取得するようにしてください。
x | 5 |
y | 3 |
z | |
合計 | 10 |
まとめ
今回は,セルを操作し,値や色を設定する方法を学びました。また,プロパティの取得の方法も学びました。演習問題をしっかりと行って,知識を定着させてくださいね。