エクセルマクロ・VBA入門第8回: 条件分岐をマスターしよう!

こんにちは、「今より楽に仕事を回そう」デスクワークラボの吉井良平です。

ノンプログラマーのためのエクセルマクロ入門」も第8回となり、今回は条件分岐です。

条件によって処理を分ける方法が分かれば、大体のマクロが書けるようになります。条件分岐をマスターして、バリバリと仕事を効率化させていきましょう!

条件分岐とは?

 

条件分岐とは、条件によって処理を分けることです。

エクセルの関数で、IF関数って良く使いますよね。IF関数は、「もし〇〇ならば」という条件によって、結果を変えていきます。

マクロの条件分岐も同じような感じで、「もし〇〇ならば」という条件によって処理を分けていきます。

IF関数だとセルの値を変えるだけですが、マクロの条件分岐を使うと、条件に合ったデータだけを別のシートにコピペしたり、条件によって参照するデータを分けていったり、いろんなことができるようになります。

言葉で説明すると分かりにくいので、実際にマクロを作っていきましょう!

 

サンプル1:財布に何円入っているか?

 

最初なので、単純なマクロを書いてみましょう。

下記のコードを、ビジュアルベーシックエディターに入力して、実行してください。

コピペでも良いですが、自分で入力した方が覚えるので、できれば入力してくださいね。

 

インプットボックスに、数字を入力すると、50,000以上の数字の場合は「多いですね!」というメッセージが出ます。

僕の財布には、こんなに入ってないですけど^^

僕の財布には、こんなに入ってないですけど^^

条件分岐の文法説明

 

条件によって処理を分ける場合は、

If 条件 Then

処理

End if

という書き方で指定します。

サンプルのマクロだと、もし Amount(インプットボックスで入力された値)が 50000 より大きい数字であれば、”多いですね!” というメッセージを表示させるようにしています。

 

条件を追加する

 

これだけだと寂しいので、このコードを次のように変えてみましょう。

書き換えた方は、50000より大きい数字以外は、”少ないですね!”と表示されるようになっています。

このように、最初に指定した条件以外 を指定する場合は、Else というコードを書くことによって、それ以外の場合の処理方法を指定することができます。

 

もう一つ条件を追加する

 

このマクロだと、50,000円未満は “少ないですね!” と表示されていますが、50,000円以上の現金が財布に入っている人の方が少ないはずです^^

なので、10,000円以上持っている人の場合は、”普通ですね!”と表示させるようにしてみましょう。

さらに条件を追加する場合には、ElseIf を途中に追加すると、さらに条件を設定することができます。

こんな感じで、どんどん条件を追加していくことができます。

VBAの条件分岐

流れにすると、こんな感じです。

 

サンプル2:年齢当てゲーム!

 

条件分岐をさらに理解するために、もう一つサンプルプログラムを作ってみましょう。

ちょっと楽しくするために、年齢当てゲームを作ってみます。

下記のコードを入力してみてくださいね。

 

ゲームの内容

 

誰かの写真を用意しておいて、その人の年齢を当てるゲームです。

今回は、例としてこの人の年齢を当てていただきます。

RY1

まぁ私ですけどね。

特に顔出ししたいわけじゃないんですが、肖像権の問題があるので自分の画像です^^

RealAge という変数に、その人の年齢を入れておきます。

そこから、前回やった繰り返し処理で、年齢当てクイズをループさせています。

インプットボックスで入力された数字を、YearsOld という変数に入れて、

  • 入力した数字と RealAge が等しい場合: ”当たり!”と表示させて、繰り返し処理から抜ける(繰り返し処理から抜ける場合は、Exit  という命令を使います)
  • 入力した数字が RealAge よりも大きい場合: ”もっと下!”と表示させて、繰り返し処理を続ける
  • 入力した数字がそれ以外の場合( = RealAge よりも小さい場合): ”もっと上!” と表示させて、繰り返し処理を続ける

と、条件によって処理を分けています。

皆さんも、ご自分の家族の写真などでゲームを作ってみてください^^

 

実用的なプログラム

 

サンプルのプログラムは少し遊んでいたので、実際に実用的なものも作ってみます。

「データの一覧表から、フィルターを使って条件ごとにデータを抽出して別シートにコピペ」という作業をしている人は結構います。

この作業って、単純作業で結構時間がかかります。条件が増えてくると、結構大変です。

ということで、条件ごとにデータを分けて別シートにコピペするマクロを作ってみました。

 

都道府県の人口ごとにシートを分けるマクロ

 

都道府県の人口一覧から、「300万人以上」「200万人以上」「100万人以上」「100万人以下」というようにシートを分けていきます。

0102

こういうデータを

シートごとに分けていきます

シートごとに分けていきます

サンプルデータがあった方がやりやすいと思いますので、下記からサンプルデータをダウンロードできます。

ダウンロード

 

入力するコード

 

入力するVBAのコードは下記の通りです。長いですが、できれば入力してみてください。コピペでも大丈夫ですけど。

(本当はもう少し短く書くこともできますが、分かりやすくするために長くしています。その分、入力が面倒になりますが・・・)

 

コードの解説

 

AllRow = ActiveSheet.Rows.Count で、シートの最終行を取得しています。これはお決まりのように毎回出てくるので、そのまま覚えておいてください。

LastRow1 = Cells(3, 1).End(xlDown).Row で、3行目から続くデータの一番最後の行の行番号を取得しています。この場合は、沖縄の行番号 50 が入ってきます。

For i = 4 To LastRow1 で、4行目(青森)から50行目(沖縄)まで、iという変数を繰り返す命令をしています。

ここから先は、i行の3列目が3000以上だったら300万人以上シートへ、2000以上だったら200万人以上シートへ・・・と、データを写すようにしている部分です。

解説するよりも、ご自分で解読した方が身に付くと思うので、1行1行がどんなことをしているか解読していってくださいね。

 

ともあれ、これで手作業でやったら1分以上かかる作業を、一瞬で終わらせることができるようになりました。

 

まとめ

 

今回の条件分岐で、基本的なマクロ(VBA)の機能の紹介は完了です。

ここから先は実践あるのみで、自分で試行錯誤しながら作ったり、人が作ったプログラムを見て、マクロをマスターしていってくださいね。

ここまでの内容が理解できていれば、もう少し難しいサイトで調べてみても、大体の意味が分かるようになっているんじゃないかと思います。

私が作ったいろいろなマクロも、パスワードなどかけず、誰でもが中身を見れるようになっています。参考例として、解読してみてください。

(タグで、マクロを選択すると、いろいろ出てきます)

 

 

とはいえ書籍やサイトだけだと、実用的なマクロを作るまでには時間がかかりますし、途中であきらめてしまうこともあるかもしれません。

ご希望の場合は、スカイプで画面共有しながらのマンツーマンレッスン(1時間3,000円)を行っていますので、お気軽にお申し込み下さいね。

(ご希望の際は、下記のフォームに「マクロマンツーマンレッスン希望」と記入して送信してくださいね)

お名前 (必須)

メールアドレス (必須)

メッセージ本文

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ABOUTこの記事をかいた人

昭和48年広島県生まれ。現在も広島に住んでいます。 趣味は音楽鑑賞(邦楽、洋楽問わず、クラシック、童謡も)、マンガです。エクセルを効率的に使う方法を紹介して、あなたのお役に立ちたいと思っています。