DTPのためのExcel VBA基礎 (3) If文
VBAのIf文の使い方です.
構文
If文は条件分岐して処理を行うために用いられます.
条件を満たした場合に何らかの処理を行う場合の構文は
If 条件 Then |
です.
例えば,A1セルに特定の英文が入っている場合にのみ,A2セルに文言を入れるコードは次の通りです.
Sub Happy() |
条件文では=
を代入ではなく等しいの意味で使いますが、特に問題はないでしょう。
問題
A1セルに「VBA」と入力されているときのみ、B1セルに「マクロ」と入れることができますか?
応用(アレルギー表示)
A1セルにフラグ「●」が立っているときのみ、B1セルに「※本品にはそば粉を使用しています。」という文言を元から入っていた文言の後ろに追加して入れてください。(追加方法を忘れた方は、文字結合をもう一度おさらいください。)
応用(コメントアウト)
A1セルに「コメントアウト」と入力されているときのみ、B1セルのテキストを<!--
と-->
で囲むことができますか?(HTMLのコメントのつけ方です。)
Else
条件を満たさなかった場合に何らかの処理を施したいなら、Else
を使います。
構文は
If 条件 Then |
です.
例えば,
Sub 幸せなら手をたたこう() |
条件
If文での条件は自由に設定できます。
例えば、以下の通りです。
Cells(1, 1) = 1
:A1セルが1のときCells(1, 1) > 0
:A1セルが0より大きいときCells(1, 1) >= 0
:A1セルが0以上のときCells(1 ,1) <> ""
:A1セルが空でないとき
「以上」とする場合に>=
を使う点も、ExcelのIF関数と同じです。
直観的でないのは最後の<>
(〜と等しくない)という演算子を用いるケースで、これだけ意図的に覚えればOKだと思います。
応用(画像挿入)
- A1セルが空欄でないなら、B1セルに
<img src="../img/dummy.png" width="256" height="256" alt="ダミー画像">
と入力してください。(HTMLファイルでimgタグは画像挿入に使われます。ダブルクオートを使っているので注意してください。) - そのコードに手を加えて、A1セルが空欄ならB1セルに「画像後送」と入力するようにしてください。(
Else
を使います。条件文を肯定文と否定文のどちらで作るかによって2通りの書き方ができます。)
For文と組合わせる
一定の範囲で、特定の条件を満たす場合だけ処理を行うことができるため、For文とIf文の組み合わせは強力です。
次のマクロは1〜10行目の範囲で、A列に特定の文言が入っているときのみB列に文言を入れます。
Sub グローブパペット() |
応用(検索)
A1セルと同じ値をB列1〜10行目からFor文で探し,同じ値であれば右隣のC列に「同じ」,異なる値であれば「違う」と文言を入れるマクロを作成してください.
ちなみに,B列に全部違う値が入っているようなデータであれば,A1セルと同じ値は高々1つしかありません.そのような場合,「同じ」という文言を入れた時点でFor文を打ち切った方が処理が早く終わります.For文から抜けるためには,処理を打ち切りたいところでExit For
と命令します.
応用(マージ)
A列は重複のない品番,B列が品名である10行のデータがあります.
また,E列は重複のない品番,F列が価格である10行のデータがあります.
いずれも見出し行はありません.
A列とE列には同じ品番が入っていることが分かっていますが,順番が一致していません.
A列とE列の品番が一致するように,B列の横のC列へF列に記載されている価格を流し込み,列に関してデータをマージ(=併合)したいと考えています.
処理してください.
品番 | 品名 | 品番 | 価格 | ||
---|---|---|---|---|---|
ABC-001 | 酸っぱい果実 | ABC-003 | 5000 | ||
ABC-002 | 甘い果実 | ABC-001 | 300 | ||
ABC-003 | 旨い果実 | ABC-002 | 800 |
背景色
背景色は次のように設定します.
RGB関数は左から順にRed,Green,Blueで設定します.
値の範囲は0〜255です.
Sub セル背景色の設定例() |
上の背景色のように,セルは様々なプロパティ(=性質・属性)を持っています.
プロパティはさながら英語のbe動詞のように,セル背景色は青色である,文字は太字であるなど,「〜である」という情報を保持しています.
問題
C1セルを青色に塗れますか?
応用(差分検出)
1〜20行目において,隣り合うA列とB列で値が異なった場合に,A列のセルを赤色にしてください.
フォント
フォントは次のように設定します.
必要なものだけ適宜設定してください.
Sub フォントの設定例() |
セル背景色やフォントの他、文字の配置、罫線など飾り付けを行う機能にはExcel固有の変数名がたくさんあります。これらの変数名を覚えておく必要はありません。サーチエンジンやマクロの記録機能を使って調べることができれば十分です。
折角なので、ここで次のWith
を使った書き方にも触れておきましょう。
複数同時に何かを設定したいときに共通部分を括り出すことができる便利な記法です。
上と全く同じものを次のように書くことができます。
Sub フォントの設定例2() |
問題
B1セルの文言に下線を引けますか?
応用(ダミー検出)
1〜20行目において,値が999であるセルを太字かつ赤色にしてください.
ただし,斜体や下線は変更しないでください.
さらに条件分岐させる場合
条件を満たさない場合に,さらに別の条件を検討したい場合には,ElseIf
を使います.
構文は
If 条件1 Then |
であり,判定は上から順に行われます.
A1セルが何月になっているかに応じて,B1セルの文言を分岐する例は以下の通りです.
Sub お酒は二十歳になってから() |
問題
上の例で、3月のときに雛祭りで酒が飲めると追加したいのであれば、どこにどのように書けばよいでしょうか?
なお、条件によって分岐するパターンが多数ある場合のため、Select文という構文も用意されています。
応用(配送方法)
A1セルに数値でフラグ1が立っていればA2セルに冷蔵、2なら冷凍、それ以外なら常温と入力してください。
複数の条件を組み合わせる
以下を用いることで、条件文を重文として記述できます。
And
:かつOr
:またはNot
:〜でない
以下は、A1セルに人
フラグ、A2セルに魚
フラグが立っているかどうかという2つの条件を利用してA3セルに文言を入力する例です。
Sub 人かつ魚なら人魚姫() |
Sub 人または魚なら生き物() |
Sub 人でないけど魚なら人面魚() |
Not
を使用するとコードが読みにくくなるので,できるだけ不等号<>
を使用したり,言い換えられないかを検討することが望ましいです.
ド・モルガンの法則というものを算数の時間に習いましたが,接続詞And
とOr
を反転すれば,全ての重文に掛かっているNot
を括り出すことができます.
例えば,(Not 条件1) And (Not 条件2)
はNot(条件1 Or 条件2)
とシンプルに書き直すことができます.
応用(未入のチェック)
A1セルに品名が入っておらず,B1列に金額が入っているとき,A1セルに「未入」と入力し,かつ,背景色を設定してください.
おわりに
ここまでで反復と条件を身につけました.
この先,まだまだ知らない関数がたくさん出てくるでしょうが,人の作った簡単なマクロをコピーして,ググりつつ改変して使っていくことができると思います.
それでは,よきマクロライフを!