管理栄養士のためのVBA入門|第3回:セルを操作してみよう

エクセルで栄養計算ソフト自作

みなさん,こんにちは.
シンノユウキ(shinno1993)です.

今回は「管理栄養士のためのVBA入門」の第3回,以下の記事の続きです。

前回はメッセージボックスを表示させるプログラムを書いてみましたが,今回はExcelシートのセルを操作するためのプログラムを書いてみましょう。セルに値を入力してみたり,セルの値を使用して計算してみたりします。

では,行きましょう!

前回の演習問題の答え合わせ

まずは前回の演習問題の答え合わせからやっていきましょう。実際の問題は以下の通りです。

MsgBox関数を使って,「Hello World!」を出力するプログラムを作ってみましょう。作成する際は,新しくSubプロシージャを作成し,プロシージャ名は「演習2」としてください。

答えは以下の通りです:

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関数を用いてセルの値を取得するようにしてください。

x5
y3
z 
合計10

まとめ

今回は,セルを操作し,値や色を設定する方法を学びました。また,プロパティの取得の方法も学びました。演習問題をしっかりと行って,知識を定着させてくださいね。

連載目次

  1. 管理栄養士のためのVBA入門|第1回:VBAとは?
  2. 管理栄養士のためのVBA入門|第2回:VBAを実行してみよう
  3. 管理栄養士のためのVBA入門|第3回:セルを操作してみよう現在のページ
  4. 管理栄養士のためのVBA入門|第4回:変数と定数について理解しよう
  5. 管理栄養士のためのVBA入門|第5回:条件分岐を理解しよう
  6. 管理栄養士のためのVBA入門|第6回:繰り返し処理を理解しよう
タイトルとURLをコピーしました