F. マクロ実行とコード

使用するファイル:「マクロの練習」フォルダー「合否判定を行う.xlsm」

(vba08)
(vba08)

難易度が高い課題にいきなり挑戦するのは挫折の元。

 

「D. マクロを実行してみる(その1)」では、複数のシートをまとめるマクロは、シートとセルを操作しているため、まったくの初心者にとっては、決して簡単ではない。

 

比較的やさしいと言われている、セルを操作するマクロを実行して、そこに書かれているコードを見ることからマクロを始めましょう。

F-1. マクロを実行する

ここでは出来上がっている簡単マクロを使用して VBE の操作を見ていくことにします。

使用する教材は「合否判定を行う.xlsm」ブック。下図は、その実行後の画面表示だ。 

 

A 列の点数が 80 以上を「合格」、80 未満を「不合格」と、B 列に表示するマクロ。

(C2L10_01) 合否判定マクロの実行結果表示画面
(C2L10_01) 合否判定マクロの実行結果表示画面
  1. 他のすべての Excel を閉じて、
    サンプルファイル「合否判定を行う.xlsm」ブックを開く

「他のすべての Excel を閉じて、・・・」は重要です。

マクロは開いているすべての Excel ファイルを認識できるので、マクロが混乱するのを避けるためにも、関係のない Excel ファイルがあれば、事前に閉じておきましょう。

 

  1. 「開発」タブの「マクロ」ボタンをクリックしてダイアログを表示する。マクロを選択し「実行」ボタンをクリックする。

※ ここで紹介する操作は、「E-1-1.「マクロ」ダイアログからVBEを起動する」で紹介したものです。必要であればそちらを参照してください

(C2L10_02) マクロを実行する
(C2L10_02) マクロを実行する
  1. 開始のメッセージが表示され、これに「はい」か「いいえ」で応える
(C2L10_03) 開始メッセージに応える
(C2L10_03) 開始メッセージに応える
  1. B 列に「合格/不合格」結果が表示され、終了メッセージが表示される
(C2L10_04) 結果と終了メッセージが表示される
(C2L10_04) 結果と終了メッセージが表示される

また、開始時と同様に、終了時にもメッセージが表示されるが、今回は「OK」のボタンが表示されているのも確認しよう。

 

「OK」のボタンを押す前は、Excel での他の操作ができるかどうかも確認してみよう。

F-2. VBE を起動し使われているプログラミングコードを見る

(f01)
(f01)
  1. 「Alt」+「F11」キーで VBE を起動する
(C2L10_05)「Alt」+「F11」キーを押し、VBE を起動する
(C2L10_05)「Alt」+「F11」キーを押し、VBE を起動する
  1. プロジェクトエクスプローラーでマクロモジュール(Sample)をダブルクリックして、コードウィンドウにコード内容を表示する。
(C2L10_06) プロジェクトエクスプローラーからコードウィンドウを表示する
(C2L10_06) プロジェクトエクスプローラーからコードウィンドウを表示する

ヒント:

標準モジュール」で「Sample」名とは?

モジュール名は本来(挿入された時点)は「Module1」などとなっているが、これを変更したものです。すなわちモジュール名は本来の物を変更できます。

  1.  マクロ内容を表示する。

プログラミングに共通する考え方の、演算子関数変数if文For~Next文が使われている状況を確認する。

(C2L11_01) 使用されているプログラミング要素
(C2L11_01) 使用されているプログラミング要素
  1.  マクロ全容を読んでみる。

マクロは英語文章のように記述されているが、これを日本語に変えると以下のようになる:

 

Sub :「合否判定を行う」サブプロシージャです

 

Dim : 文字 i を、桁数の大きな整数を扱える変数と宣言する

 

IF 

MsgBox :

「合否判定を行いますか?」とのメッセージを出して、「はい」か「いいえ」の返答を待つ。

 

vbNo :

Then :

返答が、「いいえ」であれば、

 

Exit Sub :

サブプロシージャを終了して以降の作業は行わない。

 

For  :

i = 1 to 5 :

変数 i の値を最初に 1 として、繰り返し作業をここから始める。

値が 5 までは繰り返します。

 

IF :

Range("A" & i).Value >= 80 :

セル A & i の値(i が 1 の時は A1、以降同様)が 80 以上であれば、

 

Then :

Range("B" & i).Value = "合格"

 セル B & i の値を "合格" とする。

 

Else :

そうでなければ、

 

Range("B" & i).Value = "不合格" :

セル B & i の値を "不合格" にする

 

End iF

条件作業はここまで 

 

Next i :

変数 i  の値を +1 して、i の値が 5 迄は、ここまでの作業を繰り返す。

+1 して変数 i の値が 6 になったところで、作業を繰り返さないで、次に記述された作業を行う。

 

MsgBox :

「合否判定が終了しました」とのメッセージを出して、

 

End Sub :

「OK」が応えられたら、サブプロシージャを終了する。

 

  1. 【ミニ講座】MsgBoxRange Value プロパティ、文字結合、ループ

MsgBox("合否判定を行いますか?", vbYesNo)

MsgBox 関数はメッセージとボタンを表示して、クリックされたボタンの数値を返す関数です

ここでは、"ダブルクオーテーション"で囲まれたメッセージとともに「Yes(はい)」と「No(いいえ)」の両方のボタンを表示し、ユーザーはどちらかのボタンを押すことになっています。押されたボタンの値が戻されます。

Range、Cells オブジェクト、Value プロパティ 値

セル、シート、ブックなどの Excel の要素を「オブジェクト」といいます。

Excel の要素である個々のオブジェクトには、固有の名前があります。

 

例えばセルを表すオブジェクトを Range オブジェクト、あるいは Cells オブジェクト、ワークシートを表すオブジェクトを Worksheet オブジェクト、ブックを表すオブジェクトを Workbook オブジェクトと言います。

Excel そのものもオブジェクトの一つで、Application オブジェクトと言います。

 

セルはいろいろな側面を持っています。例えば、セルで表示する文字、文字の大きさ、文字の色、背景色、罫線等々。これを選択されたオブジェクトのプロパティ(「属性」)と呼びます。

 

セルの番地は、Range("A1") のように表します。"A1" が番地を表します。

Range の中に書くセル番地は必ず大文字で書きましょう。

何故でしょう? それは Excel の列表示が、A とか AA とか XFD 等とか大文字で表示されているからです。

 

例えばセルの文字の大きさを指定する時は、Range("A1").Font.Size =11 となります。

セルの値もプロパティの一つで、これを Value と呼び、"A1" 番地のセルの値を Range("A1").Value と表します。 

 

=」の記号は、左右が等しいということではありますが、マクロでは、左向き「」とでも考えるといいでしょう。すなわち、「=」の右側の文字や数値を左側に入れる、ということです。

 

文字は "ダブルクォーテーションで囲みます"(数字の場合は囲む必要はありません)。

 

セルを指定するには、「Range」を使うことをみてきましたが、「Cells」を使うこともあります。この場合セル番地の列を表すには(A、B、C などの列記号ではなく)1、2、3 などと数値を使って可能となります。

例えばこれまで「Range("A" & i)」で A列の i 番目の行のセルを表してましたが、同じ A列の i 番目の行のセル番地を「Cells」で表現するには「Cells(i, 1)」と記述し、i 行目の、1 番目の(すなわち A )列のセルとして表示します。

 

Range 場合のセル番地の表現は、(「列記号」&「行数」)ですが、Cells の場合は(「行数」,「 列数」)と、カンマで区切って「行」と「列」の表示順が逆に表現されます。加えて、「列」の表記が "A" のように「列記号」なのか、「列数」なのかの違いがあります。

「Range("A" & i)」の表示は、縦方向のループには変数 「i」 の値で行番号を変えることでよかったのですが、 横方向のループ処理を表現するには、横方向に列記号を "A" から "Z"、"AA"から"AZ"、"AAA"から"XFD" までなどと、大変なことになってしまいそうです。

横(すなわち列)方向のループを列記号ではなく列で表すためにも Cells 表記があるものと考えます。

 

 

Range("A" & i).Value  文字結合 &(アンパサンド)

セル番地が "A" & i、と表示されています。

これは、文字 A と変数 i とを & (アンパサンド)を使って結合させています。

変数 i は、1 から 5 までの数値をとれるので、Range(A1)から Range(A5) までのセルを順次表しています。

同じく Range("B" & i) は (B1) から (B5) までのセルを表しています。

 

ループ処理(For ~ Next 文)

ループ処理の一つである For ~ Next 文を使うと、この間に記述されている作業を、繰り返し行うことができる。繰り返す回数は「カウンター変数」と呼ばれ、カウンター変数には「i」を使うことが慣習になっています。「i」は「Iterator(反復子)、Increment(増加)、Integer(整数)」等からきているものと思われます。

 

For 文では変数 i の値の初期値と範囲(i = 1 to 5)が記述されていて、i の値がその範囲にあるときのみ、For 文以下 Next 文までを繰り返します。

For 文と対になっている Next 文では変数 i の値を+1 して、範囲内の値であれば、For 文まで戻ります。+1した結果変数値が範囲を超えると、For には戻らず、For 文の次の作業を行います。