1. はじめに
ARアドバンストテクノロジ株式会社(ARI)の鈴木タクヤです。
早いもので、この解説シリーズも第6回です。
このシリーズは主に、もしもVBAが使えたら という並行世界を目指す初心者に向けたものです。なかなかVBAの実践的な内容に入らないなーと思われるかもしれませんが、何事も基礎は大切。(私自身、当初はExcelフィルタリングツールの処理の流れをザックリ解説して終わろうかと思っていましたが、後輩の研修にも使えるかもと、方針を変更しました。)
また、それ知ってるよ!という方にも何かしらの気づきがあるような記事を目指しておりますので、よろしければお付き合いください。
もしも、あなたから「いいね」が貰えたら、私はうれしいです。
というわけで、今回はExcelフィルタリングツールのソースコード解説第6回です。
(ツールの詳細については以下の記事を、「Excelフィルタリングツール解説シリーズ」タグの記事一覧については以下の記事下部「5. 解説記事のリンク」をご参照ください。)
解説第5回 は変数のスコープについての記事でしたが、今回のテーマは少し実践的な内容かつ、プログラミングにおける最重要項目の一つともいえる 「Ifステートメント」 です。書き始めたら長くなってしまったので前後編に分けさせていただきます。
「Ifステートメント」をマスターすれば 「マクロの記録」(解説第2回 のおまけ参照)では実現できないような複雑な処理を組めるようになります!
そもそも「マクロの記録」を知らないよ!という方は、 解説第2回 のおまけに使い方を載せているので、是非ご覧ください。世界が変わります。
2. Ifステートメントとは
「If文」とも呼ばれますが、「もしも○○だったら△△」という条件を記述するためのものです。最もシンプルな「もしも○○だったら△△」という条件分岐は以下のように記述します。
If ○○ Then '○○の部分にもしもの条件を記述
△△ '条件に当てはまる場合のみ実行する処理を記述
End If '条件に当てはまる場合のみ実行する処理の修了を宣言
以下のように一行で記載することもできますが、可読性(読みやすさ)が下がるためあまりお勧めしません。
If ○○ Then △△
Sub a()
Dim あなたからもらえたもの As String '変数「あなたからもらえたもの」を宣言
Dim 私の状態 As String '変数「私の状態」を宣言
あなたからもらえたもの = "いいね" '変数に文字列「いいね」を代入
If あなたからもらえたもの = "いいね" Then 'Ifステートメントを使用
私の状態 = "うれしい" '条件を満たす場合のみ実行
End If '条件分岐(もしもの世界)を修了
MsgBox 私の状態 '変数「私の状態」の値をメッセージボックスに表示
End Sub
解説第4回 でも触れたように、変数名には日本語の漢字や仮名も使用できます。この例ではもしも変数 あなたからもらえたもの
の値が「いいね」だったら、変数 私の状態
に「うれしい」を代入するという条件分岐になります。Ifステートメントの直前で条件を満たすように あなたからもらえたもの
に「いいね」を代入しているので、実行結果は以下のようになります。
もしも、あなたから「いいね」が貰えたら、私はうれしいです。(くどい?)
また、「もしも」の条件に当てはまらなかった場合にだけ実行する処理は、以下の例のように Else
や ElseIf
を使用して記述します。
If ○○ Then
△△
ElseIf □□ Then '○○の条件を満たさない場合の条件□□を追加
×× '○○ではないが□□の条件を満たす場合の処理を記述
Else
▼▼ 'ここまでの条件をすべて満たさない場合の処理を記述
End If
Sub a()
Dim あなたからもらえたもの As String '変数「あなたからもらえたもの」を宣言
Dim 私の状態 As String '変数「私の状態」を宣言
あなたからもらえたもの = "ストック" '👈変数に文字列「ストック」を代入
If あなたからもらえたもの = "いいね" Then 'Ifステートメントを使用
私の状態 = "うれしい" '「あなたからもらえたもの」の値が"いいね"の場合のみ実行
ElseIf あなたからもらえたもの = "ストック" Then '👈ElseIf で上の条件を満たさない場合の条件を追加
私の状態 = "ちょっとうれしい" '「あなたからもらえたもの」の値が"いいね"ではなく、"ストック"の場合のみ実行
Else '👈上の条件をいずれも満たさない場合の処理開始を宣言
私の状態 = "読んでもらえただけありがたい" '「あなたからもらえたもの」が"いいね"でも"ストック"でもない場合のみ実行
End If
MsgBox 私の状態 '変数「私の状態」の値をメッセージボックスに表示
End Sub
Excelフィルタリングツール では、例えば clearFilter
というSubプロシージャの中で、以下のような記述が登場します。(起動モードを表す変数 modeNo
の値が1でない場合のみ、2に設定するという処理です。(ここだけ見るとわけのわからない処理ですが・・・。)
'■適用済みフィルタのクリア処理
Sub clearFilter()
'起動モードを設定;modeNo=1:フィルタリング でないときは 2:フィルタのクリア に設定する
If modeNo <> 1 Then
modeNo = 2
End If
(後略)
If
や ElseIf
の後に記述する条件式は =
以外にも、この例のように「等しくないこと」を表す <>
や不等号(「未満」の場合 <
、「以上」の場合は >=
など)も使用できます。
また、 Not
を用いれば上の例の modeNo <> 1
を Not modeNo = 1
と表すこともできます。この =
や >=
などを 演算子 と呼びます。(加算乗除の +
-
*
/
などの計算の記号も演算子の一種。)
演算子 And
Or
は後編で紹介しますが、すべては紹介できないので、詳しく知りたい方は以下の記事をご参照ください。この記事でちらっと触れられている Like
についてはいずれこのシリーズでも取り上げる予定です。
ちなみに、Ifステートメントは入れ子(ネスト)で使用することもできます。
If ○○ Then
△△
If ●● Then
▲▲
End If
End If
3. おわりに
以上、Ifステートメント の解説、前編でした。
補足ですが、今回紹介した例は説明のために単純なコードとなっているため、条件分岐と言いつつも実行結果は毎回同じものとなります。しかし、実際にIfステートメントを使用する必要がある場面では、処理の呼ばれ方によって結果が変わることがほとんどです。(○○が存在すれば~とか、セルの値が××の場合は~とか。)
次回の後編では、「ブール型」 の変数や 「論理演算子」 を使用したIfステートメント、そして知っていると便利な 「ド・モルガンの法則」 について解説したいと思います。
👇次回
4. 参考文献
こちらは私がものすごくお世話になっている「エクセルの神髄」という解説サイト。より深く学習を進めたい方は是非。