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

Excel

みなさん、こんにちは。

シンノユウキです。

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

管理栄養士のためのVBA入門!第2回:VBAを実行してみよう
みなさん、こんにちは。 シンノユウキです。 今回は「管理栄養士のためのVBA入門」の第2回、以下の記事の続きです。 今回から実際にプログラミングに入っていきます。まずはプログラムを書く場所や、書いたプログラムを実行する...

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

では、行きましょう。

 

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

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

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

答えは以下の通りです。

特段難しいことはないですよね。MsgBox関数は、引数に文字列を入力することで、その文字列をメッセージボックスとして表示させることができます。プログラムを組んでいく際に、変数(詳しくは後で解説します)の値を確認したり、何らかのメッセージをユーザに示す際に使用したりする便利な関数です。手軽に使用できますので、使い方は覚えておくようにしましょう。

 

セルに値や色を設定してみよう!

ではさっそく、セルに値を入力していきましょう。

が、その前に、簡単に「オブジェクト」「プロパティ」という概念について勉強しておきましょう。

オブジェクトというのは、ExcelVBAのプログラミングにおいては、ワークシートやセル、グラフや図形などの、Excel上に存在する対象物すべてのことを指します。セルA3というのもオブジェクトですし、シート:Sheet1というのもオブジェクトです。

また、プロパティというのは、オブジェクトの属性や状態のことです。例として、以下のようなワークシートとセルがあったとしましょう。

 

このシート上では、セルB2には「123」という値が入力されていますよね。この場合、セルB2というオブジェクトにおいて、値の状態として「123」が設定されていることを意味します。セルにおける値もプロパティの一種なのですね。同様に、セルB3にはプロパティとして「テスト」という値が設定されています。また、フォントの色として「赤色」がプロパティに設定されています。つまり、セルにおいてフォントの色というのもプロパティの一種なのですね。

このことを理解しておくと、セルに値を入力するのも簡単です。セルというオブジェクトに、値プロパティを設定するというイメージですね。

では、実際にVBAを使用して、上のようなシートになるように値を設定したり、フォントの色を設定したりしてみましょう。

実際のコードは以下のようになります。

 

 

すこし難しそうに見えますが、オブジェクトとプロパティの関係を理解しておくと、決して難しくありません。VBAプログラミングにおける、オブジェクトとプロパティとの関係は以下のようになっています。

オブジェクトに、プロパティをピリオドでつなぎ、=で代入します。ここでのイコールは、右辺と左辺が同じという意味ではなく、右辺を左辺に代入という意味で用いられます。プログラミングにおいては、こういった日常的に使用している事柄の意味が違うということがありますので、混乱しないように注意してください。

ここでは、Range("B2")というオブジェクトのValueプロパティに、123という値を設定しています。セルの値は、VBAでは「Value」プロパティという情報として格納されているのですね。こうすることで、セルB2に123という値が設定されます。

3行目の

 

という箇所については説明は不要ですよね。2行目と同じことをしています。

しかし、4行目については少し説明が必要かもしれません。ただし、それほど難し考えることもないです。

 

ここではセルB3というオブジェクトのフォントプロパティを取得し、フォントオブジェクトにカラープロパティを設定しています。右辺のvbRedがVBAにおける赤色のことですね。ここでは、フォントが、プロパティにもオブジェクトにもなっています。まぁそれほど深く考える必要もありません。こんな構造になってるんだーくらいの感覚でも全然OKです。難しいことを頑張って覚えるよりも、まずはこうするとこんな結果になるんだ、くらいの理解で大丈夫です。次第にわかるようになってきますので。

 

セルの値を使って計算してみよう!

次はセルの値を使って計算してみましょう。

次のシートを見てください。

 

このシートで、セルB2の値とセルB3の値の合計をセルB4に設定してみましょう。暗算でもできますし、Excel上で数式を使っても簡単にできますが、VBAでやるんですよ!千里の道も一歩から。こういった簡単な計算から徐々にステップアップして、最終的には複雑な計算でもできるようになっていきましょう。

コードは以下のようになります。

 

 

このコードでは、右辺で合計を計算し、左辺に代入しています。これも直感的に理解できるでしょうか。右辺で値プロパティを取得して、それをプラスしています。オブジェクト.プロパティで、そのプロパティを取得できるのですね。四則演算も、Excelで数式を利用する際と同じ記号で大丈夫です。すなわち、足す→ + 、引く→ - 、掛ける→ * 、割る→ / です。

 

RangeではなくCellsを使ってみよう!

これまで、オブジェクト:セルを取得する際にはRangeを使用してきました。しかし、Rangeでのセルの取得には、セル範囲を文字列("A1"など)で入力しなくてはならず、連続してセルを処理する際には少し不便です。特に、これから繰り返し処理などを記述していく際には、Rangeでセルを取得していくのは難しくなります。

そこで、文字列でセルを取得するRange関数に対して、数字でセルを取得するCells関数というものが用意されています。この関数では引数が2つ必要で、1つ目の引数で行番号を、2つ目の引数で列番号を入力します。Rnage関数では、A1のように列名を書いた後に行番号を書いていたのですが、これが逆になります。それに加えて、列をAやBなどの文字列ではなく列番号で記述しなければなりません。

列番号は、A列を1とし、右に1ずつ増えていきます。すなわちB列は2、Z列は26です。最初はややこしく感じるかもしれませんが、繰り返し処理などの複雑な処理を行うようになると、いちいちAやBなどの文字列で列を指定するのではなく、列番号で指定したほうが楽に感じられるようになりますので、今のうちから慣れておきましょう。

では、先ほどお示ししたコードを、RnageをCellsに変えて書き直してみましょう。以下のようになれば正解です。

 

できましたでしょうか?

 

演習問題

以下の表をExcelシートのA1にコピーし、zの値を求めてください。ただし、Range関数ではなく、Cells関数を用いてセルの値を取得するようにしてください。

x 5
y 3
z
合計 10

 

まとめ

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

 

連載目次