エクセルマクロ&VBA初心者超入門講座(4)【Withステートメント・マクロの登録・If文その1】

Pocket

 

はじめに

エクセルマクロ&VBA初心者超入門講座(2)とエクセルマクロ&VBA初心者超入門講座(3)ではセルを扱うための基本知識を中心に学びました。今回はWithステートメント、マクロのエクセル画面への登録方法、そしてif文の基礎を学びます。

いよいよ簡単なアプリなら作れるようになってくる段階ですね。

標準モジュールの準備

Excelのマクロは全て標準モジュールと呼ばれる場所に記述します。以下の手順に従って標準モジュールを画面に表示しましょう。

挿入]⇒[標準モジュール]を選択します。
標準モジュールの挿入

すると、標準モジュール⇒Module1と表示されます。下記画像の赤枠の部分です。

標準モジュールの操作

Module1]を右クリックし、[コードの表示]をクリックします。これで、標準モジュールにマクロを登録する準備ができました。

標準モジュールのコードを表示

全てのマクロは常に標準モジュールに書き込む」と考えてOKです。

Withステートメントを使いこなそう

Withステートメントは特に難しいものではありませんが、Withステートメントを理解するには先ずはWithステートメントを使わない例を見るのが手っ取り早いでしょう。

まずはサンプルコードの解説をします。1行1行見ていきましょう。

Range(“A1”).Value = “売上高”これは簡単ですね。A1セルに「売上高」という文字列を代入しているだけです。

Range(“A1”).Font.Size = 20このコードは、A1セルのFontプロパティSizeプロパティに20を設定しています。

なんだか長く連なっていてややこしく感じるかもしれません。ちょっと例え話をしてみましょう。

こんなVBAステートメントはありませんが、「パソコン(PC)のデバイス(周辺機器)のマウス」みたいなものです。もしコードで書くとしたら以下のようになるでしょう。

Pc.Device.Mouse

同じように、「セルのフォントのサイズ」を意味しているわけです。フォントの大きさは数値で指定するので、今回は適当に20にしてみました。

Range(“A1”).Font.Bold = Trueも似たようなものです。「セルのフォントのボールド(太字)」にTrue(真)を設定しているわけです。Trueという値は、ちょっと特殊で、True(真)の反対はFalse(偽)です。要は「真」か「偽」の2通りしかない値なんです。

で、フォントが太字かどうかって、「太字じゃない」・「太字である」に2通りしかないですよね?

だから、TrueかFalseのどちらか一方をBoldプロパティにセットしているというわけです。今回はTrueがセットされていますから、「太字にする」という意味になります。

しかし上記のコードにはちょっとめんどうな点があります。

どこがめんどうかというと、Range(“A1”)を何度も書かなくてはならない点です。これを回避する機能がWithステートメントです。

では、「百聞は一見に如かず」ということで上記のコードをWithステートメントを使って書き換えてみましょう。

このように書けば、いちいちRange(“A1”)を何度も書く必要はありませんね。

Withステートメントの書式

With オブジェクト
    .プロパティ1
    .プロパティ2
  ・
  ・
  ・
End With

理解を助けるためにもう1つくらいサンプルコードを見てみましょうか。

サンプルコード1ではあえてWithステートメントを用いない方法で書きます。

そしてサンプルコード2では、Withステートメントを用いて、サンプルコード1を簡略化します。

サンプルコード1

まずはサンプルコードを一行、一行解説していきますね。

Range(“A11”).Value = “=SUM(A1:A10)”

おっとこれは見慣れない、パターンですね。実はRangeオブジェクトのValueプロパティには、普段ワークシートで利用している関数をセットすることもできるのです。従って、A1セルの値は=SUM(A1:A10)になります。

Range(“A11”).Font.Size = 13

これはさっきやったやつですね。「A11セルのフォントのサイズ」に13をセットしています。

Range(“A11”).Font.Bold = True

これもさっき説明したやつですね。「A11セルのフォントの太字にするかどうか」にTrue(太字にする)をセットしています。

Range(“A11”).Font.ColorIndex = 3

これは「A11セルのフォントの色」に3をセットしています。3は赤色を表します。

Range(“A11”).NumberFormatLocal = “¥#,###”

このコードでは「A11セルセルの書式設定(NumberFormatLocal )」に“¥#,###”をセットしています。

“¥#,###”は、セルの書式設定を「通貨」に設定することを意味します。

¥記号で始まり、#,###となっているところには、数値が、2,000といった形になるというイメージです。

#は数字表すわけですが、#,###とすると、#が4つだから4桁までの数字にしか対応しない気がしますよね?

でも例えば、100000000000という数値がA11セルに入力されても、ちゃんと3桁区切りで、100,000,000,000と表示されます。

尚、サンプルコード1の実行結果は以下のようになります。

VBAによるセルの書籍設定のサンプルコードの実行結果画面

さて、このセクションではWithステートメントへの理解を深めることが目的でしたね。サンプルコード1をWithステートメントを使って書き換えると以下のように簡略化されたコードになります。

サンプルコード2

どうでしょうか?Withステートメントの使い方が分かってきたのではないでしょうか?

要は何度も同じこと(この場合はRange(“A11”))を書くのは面倒なので、With~End Withで囲まれた範囲に、特定のオブジェクト(この場合はRange(“A11”))のプロパティを列挙していいですよ。という機能なのです。

初歩的なIf文を使えるようにしよう!

If文とは条件分岐をするためのマクロです。全くプログラミングの経験がない方のためにまずは日本語でIf文を書いてみます(但しif関数を理解している方であれば、ここまで丁寧に説明する必要はないですね。)。

もし(所持金が500円)ならば、A1セルに”今日のお昼は牛丼です。”と表示する。
もし(所持金が1500円)ならば、A1セルに”今日のお昼は海鮮丼です。”と表示する。
もし(所持金が500円でも1500円でもない)ならば、A1セルに”所持金が不明です。”と表示する。

この日本語で書いたプログラム(?)を見れば分かる通り、A1セルに表示されるのは、「”今日のお昼は牛丼です。”」・「”今日のお昼は海鮮丼です。”」・「”所持金が不明です。”」の3通りのうちいづれか1つになりますよね?

このようにIf文は、条件によって実行されるプログラムを変えることができるのです。逆の見方をすれば、条件を満たさないコードは、実行されず、無視されるということです。

If文の書式

If 条件式1 Then 条件式1が満たされたときの処理
ElseIf 条件式2 Then 条件式2が満たされたときの処理
Else 全ての条件式が満たされなかった場合の処理

Thenは「ゼン」と読みます。和訳すると「それから、その後」という意味です。

Elseは「エルス」と読みます。和訳すると「その他の」という意味です。

Ifステートメントのサンプルコード1

VBAにおける最も基本的なif文

条件式の部分は、A1セルの値が”OK”となっているかどうかを意味しています。

もしA1セルの値がOKとなっていれば、Range(“A1”).Interior.ColorIndex = 43が実行され、セルの背景色が緑色になります。

逆に、もしA1セルが空っぽだったり、”NG”といった値等が入っていたら、何も実行されません。セルの背景色は元の無色のままです。

ちなみに、セルの値の文字色を変えるコードは、

Rangeオブジェクト.Font.ColorIndex = 数値でしたね。

一方セルの背景色を変えるマクロは、

Rangeオブジェクト.Interior.ColorIndex = 数値です。

ColorIndexプロパティの色番号一覧

VBAのColorIndexプロパティの色番号一覧

またRGB関数を用いてセルの背景色や文字色を設定することもできます。Excel2007以降のバージョンをお使いであれば、RGB関数によって16000色の色指定ができます。詳細は「Excel VBA|セルの背景色:Interior.ColorIndexプロパティの色番号対応表一覧」をご覧下さいませ。

Ifステートメントのサンプルコード2

今度は、If-ElseIf-Elseステートメントを使った条件分岐のマクロを紹介します。

この例では3パターンに条件分岐しています。A1セルが空白の場合は下記の画像のようにエラーメッセージが表示されます。

VBAにおけるIfステートメントの実行結果

尚、MsgBoxメソッドの書式は以下の通りです。

MsgBox Prompt:=”表示するメッセージ” Title:=”ホップアップ”のタイトル文”

また、thenに続いて改行している点に注意して下さい。

改行しなくても問題なくマクロは動作しますが、改行した方がVBAのコードが読みやすくなるというメリットがあります。読みやすいコードを書くことは自分にとっても他人にとっても極めて重要なことです

if 条件式 Then
        条件式が満たされた場合に実行する処理

というような形式でIf文を書く癖をつけておくと良いでしょう。

さて、A1セルの値が「OK」になっている場合は、以下のような実行結果になります。

VBAのElseIfステートメントの実行結果

さらに、A1セルの値が空欄でもなく、「OK」でもない場合、以下の画像のような実行結果になります。

VBAのElseステートメントの実行結果

IfElseIfには、Thenをつける必要がありますが、Elseには条件式も必要なければ、Thenも必要ありません。なぜなら、Elseは、If文ElseIf文のいづれの条件にも合致しなかった「その他の場合」を表すからです。

マクロをボタンに登録する

このセクションでは、マクロをボタンに登録し、ワークシート上のボタンをクリックすれば、マクロが起動するようにします。

ボタンに登録するマクロは選択しているセル(ActiveCell)を、A1セルにコピーするだけの簡素なマクロです。

コードは以下の通りです。

まずは適当なオートシェイプ(図形)をエクセル画面に配置します。どの図形でもOKです。

オートシェイプにマクロを登録する

次にオートシェイプ(図形)を右クリックし、[マクロの登録]を選択します。

マクロの登録

すると以下のような画面になるので、[CopyActiveCell]を選択し[OK]をクリックします。

マクロの登録その2

すると、マクロの登録されたオートシェイプ

をクリックする度に、今選択しているアクティブなセルがA1セルにコピーされます。

なんの実用性もないのが悲しいところですが、先ずはマクロをボタン(というか図形)に登録し、図形をクリックする度にマクロが起動するように設定する方法を覚えていただければと存じます。

おわりに

「エクセルマクロ&VBA初心者超入門講座(4)【Withステートメント・マクロの登録・If文その1】」はこの辺りで終わりにしたいと思います。まだまだ実用的なマクロを作るには、ご紹介している機能が足りないのが現状ですが、もう少しマクロを学べば、驚くほど便利なアプリを自作できるようになります。

今後とも、「エクセルマクロ&VBA初心者超入門講座」を宜しくお願い申し上げます。

 

【エクセルマクロの関連記事】

[AD]自分のペースでゆったり学ぶ Excel VBA

[スポンサードリンク]

あわせて読みたい