個サ作 #6 カレンダーLv.3 前半
こんにちは。
前回はカレンダーLv.1と2を完成させました。順次処理と反復処理、その他諸々をやったのでしたね。
今回は条件分岐による処理を実装します。その名の通り、○○だったら△△の処理を行う、というようなものです。
この分岐処理のタイミングで組込関数と演算子についても学びます。
これまでの順次処理、反復処理ではそれだけでも機能したのですが、分岐処理ではどんな条件で分岐させるか?を実装する際に関数や演算子を使うシーンがとても多いんですね。ですので、この機会に一緒にやっちゃいます。
では、参りましょう。
今回のゴール
今回は以下のことができるところまで実装します。
説明が多くて手を動かすことは少ないので進捗はあまりありませんが、その分たくさんの知識を獲得します。
カレンダーLv.3 前編
下図がカレンダーLv.3の完成形の動作です。
最初にC1セルに月を指定しています。2, 4, 6, 9, 11月なら30日までを、それ以外なら31日までを出力します。
本当は2月は28 or 29日までなのですが、まだそこに対応していない辺り、伸びしろを感じさせますね。レベル4からうるう年にも対応するようになります。
今回は新たにシートを用意したりモジュールを作ったりはせず、前回の続きからやります。
新しい要素としてカレンダーLv.3ではエラーチェックがあります。まずはそちらからいきましょう(エラーチェックの実装時に組込関数、演算子にも触れます)。
エラーチェックとは?
世の中のありとあらゆるシステムにはエラーチェックなる処理が存在します。文字通り、処理を進めるにあたってそれを阻む不具合が入力内容や前提データに含まれていないかをチェックする処理です。
例えばATMでお金をおろすとき、暗証番号の入力を促されると思います。間違えたら当然先には進めませんね。
Twitter(今はX)でアカウントを作成するとき、生年月日の設定値によってはアカウントが作成できません。13歳以上から利用が許可されているようです。
会員制サービスのサイトを利用するときにIDとパスワードを入力してログインする、というシーンは誰しもご経験があると思います。これも入力内容に不備があるとログインさせてもらえませんね。
いずれも利用者の財産を守ったり、提供するサービスの秩序を維持したり、悪意のある操作からシステムを守るためなど、誰かが不利益を被らないためにありとあらゆるエラーチェックが世のシステムには組み込まれています。
上記に挙げたような大層な例は分かりやすいですが、ちょっとした入力フォームなんかでもエラーチェックはよく実装されています。
例えばwebで問診票を書けるサービスが昨今は増えてきたでしょう。「飲酒する」にチェックが入っているにも関わらず、飲酒量の欄が空欄だったら入力を促すメッセージを表示する、というのも立派なエラーチェックです。
これには後続業務を円滑に進める、という目的がありますね。
エラーチェックの動作を確認
では、今回のカレンダーLv.3ではエラーチェックの実装にチャレンジしたいのですが、どんなエラーチェックを実装できるでしょうか。
これまではいきなりマクロを実行する、という流れでしたが、今回はまず対象の月を入力し、その上でマクロを実行するという流れです。
・・・となると、答えは自ずと見えてきますね。入力された月が正しいのかどうか?が今回実装するエラーチェックになります。
まず、エラーに抵触した場合の挙動を見ていただきましょう。2つあります。
ひとつめ。
ふたつめ。
さて、2つのGif画像を貼りました。パッと見は似たような動作ですが、それぞれ内部で動いている処理は異なります。よく見るとメッセージボックスのエラーメッセージも少し内容が違います。
ひとつめのエラーチェックでは入力された値が数字かどうか?を見ています。数字であればチェックを通過、数字でなければエラーメッセージを表示し、処理を終了します。
ふたつめのエラーチェックでは月として有効な数字かどうか?を見ています。つまり、1から12の間かどうかですね。こちらもひとつめ同様エラーに抵触すれば処理を終了します。
実装したいエラーチェックの動きについては上記の通りです。それでは早速実装したいのですが、これをするには
if文の書き方を学ぶ
関数及び組込関数を学ぶ
演算子を学ぶ
上記3つを組み合わせる
と、段階を踏まねばなりません。順番に行きましょう。
if文の書き方
では、少し手を動かしましょう。まずはカレンダーLv.3の側を作ります。以下のソースコードを前回の続きから書いてください。
'分岐処理と関数、演算子の学習
Sub E_カレンダー3()
End Sub
はい、ありがとうございます。
ではですね、一旦カレンダーのことは忘れまして、if文の書き方についてお伝えします。構文は以下です。
If [条件式] Then
[任意の処理]
End If
はい、とてもシンプルかと思います。英単語「If」には「もしも・・・だったら~」という意味があります。そして「Then」には「そのとき~」という意味があります。
ですので、もしも[条件式]の評価が真だったら[任意の処理]を実行する、という読み方ができます。
「End If」は対になる始まりの「If」の条件に合致したときに行う処理の終着点を意味します。#3でも説明した「End Sub」と同じように捉えてもらえればOKです。
さて、ここでひとつポイントがあります。#4でデータ型を紹介したとき3つお伝えしたのを覚えていますか?文字列を表すString型、数値を表すInteger型、そしてもうひとつ、|真偽《しんぎ》を表すBoolean型です。
If文に指定する条件式はその結果が真なのか偽なのか、もう少し砕いて言うと正しいのか間違いなのか?が重要になります。[条件式]の箇所には数式、変数、定数、関数のいずれかが入ります(変数だったら型はBoolean)。
(定数は#13で登場します)
If [条件式] Then
[任意の処理]
End If
少しお試しコーディングをしましょう。学習のためなので、あとで消すソースです。先ほど作った側の中に以下を入力してください。ここでは[条件式]を数式で表現するパターンをやりますね。
Dim month As Integer: month = 7
If month = 7 Then
Debug.Print "7月です。"
ElseIf month = 8 Then
Debug.Print "8月です。"
Else
Debug.Print "7月でも8月でもありません。"
End If
これでOK。まだお伝えしていない|ElseIf《エルスイフ》と|Else《エルス》もありますが、後で解説します。
イミディエイトウィンドウに注目して試しに実行してみてください。最初に変数monthに7を代入している点がポイントです。
はい、イミディエイトウィンドウに「7月です。」と出力されました。最初の条件に合致したからそこの中にある処理に進んだんですね。イメージしやすかったと思います。
では次に、初期値の設定を8にした上で実行してみてください。下図のように動けばOKです。
今度はイミディエイトウィンドウに「8月です。」と出力されました(イミディエイトウィンドウは既存の値を削除しないでいると追記されるようになっています)。
ここでElseIfについて説明します。以下が構文です。If文で条件式を書くとき、複数のパターンに分けたいときもあると思います。
~前の処理~
ElseIf [条件式] Then
[任意の処理]
End If
例えばテストの点数に応じてランク分けをしたい場合、90点以上ならS、80点以上ならA、70点以上ならB・・・というように、いずれか一つに入るように複数の分岐処理を組むことになります。
こういうときに活躍するのがElseIfで「~じゃなかったら~」のように訳すとすんなり理解できるでしょう。前の条件に該当しない場合、次のElseIfの条件式が評価されます。
※評価される=式の結果が真か偽かをチェックされること
ElseIfはいくつでも連続して書けます。ポイントはいずれか一つに合致すれば後続の条件式は評価されない点です。また、いきなりElseIfを使うことはできません。前にIfで始まりまだEnd Ifをしていない処理がある場合だけです。
ではIf文の最後にもうひとつ、おつきあいください。今度はmonthに9を代入して実行してみましょう。もうお分かりですね。
イミディエイトウィンドウに「7月でも8月でもありません。」と出力されました。最後の分岐に入ったことがうかがえます。
そうです。Elseはこれまでのどの条件にも合致しなかった場合に入る、最後の受け皿です。下記のように書きます。これもいきなりは使えずIf~の流れがあり、まだEnd Ifで閉じていないときに使えます。
~前の処理~
Else
[任意の処理]
End If
これらのIf文はカレンダーでも使用しますが、より応用的な使い方ははあみだくじの#14~でやりますので、楽しみにしていてください。
If文の基礎学習は以上です!では次に関数と組込関数をやります。
まずは関数から。
関数とは?
「関数」とは、なにか機能を作るための小さな単位の処理やプログラムを構成する部品のことです。
これまで「システム」や「機能」、「処理」などの言葉を使用してきましたが、大きさの順序としては
システム > 機能 > 処理 >= 関数 > プログラムの1行
という関係です。
「プログラムの1行」のことを命令文(ステートメント)といいます。これが最小単位ですね。文脈によってはこの命令文のことも「処理」と解釈するので少しややこしさがあります。
「命令文」がたくさん集まればそれは「関数」になり、複数の関数を使いこなすとひとつの「処理」を実現することができ、ある動作を実現するために必要な処理を集めればそれはやがて「機能」となり、複数の機能を提供できるということはそれすなわち「システム」になります。
例えばATMを想像してみてください。お金の「引き出し」という機能、「預け入れ」という機能、「振り込み」という機能、「通帳記入」という機能、いろいろあってATMというシステムが成立しています。
では、その1機能を実現するためにはいろんな処理が必要です。
ATMでお預け入れをしたとき、まず「いくら入金されたかを数える」という処理を行いますね。次に「その金額を画面上に表示する」という処理を行います。ユーザが金額を確認し、「OK」されたら預け入れの処理へ、「NG」だったらまた別の処理へ・・・という風に展開していきます。
システムの内部的な話になりますが、この「処理」を実現するために利用するアイテム(命令文の集合体)を「関数」といいます。
ここはもう少し規模のあるシステムを作っていないと感覚的に理解することは難しいと思います。なので、「関数」と呼んでいるものが何なのかを実際に見ていきましょう。
例えばこれ
MsgBox "Hello World"
見覚えがありますね。はい、#3でやったメッセージボックスです。
こちらは前回(#5)紹介しました公式リファレンスで、MsgBox関数についてのページです。
一例としてMsgBox関数を挙げましたが、関数自体はめちゃくちゃ数があり、私も全部はまったく把握できていません。
なので、肩ひじ張って理解しようとしないで、VBAに元々用意されてる便利アイテムなんだな、くらいに思っておいてください。
「関数」の意味が理解できましたら、組込関数の理解はもう簡単です。
組込関数とは?
言語が提供している関数を「組込関数」と呼んでいます。
では組込じゃない関数は何なのか?というと自分でつくる関数ですね。関数は自分でも作れるんです。ほしいものがなんでも最初から用意されていたらありがたいですけど、なかなかそうはいきません。
そんなわけなので区別して自作関数と呼んでいます。これはカレンダーLv.4で扱います。
組込関数は今回のカレンダーLv.3で使います。
実はあんまり「組込関数」という言葉は実務でも使わないです。使うなら「関数」です。今回自作関数と区別したかっただけなので、あまりこの言葉に囚われないでください(だったら仰々しく説明するなってね)。
では、次でまた手を動かしていきます。いよいよ関数を使って華麗に入力チェックをしちゃいます。処理を中断させる方法もやっちゃいましょう!
IsNumeric()関数の使い方
今「E_カレンダー3()」のソース・・・↓こういう状態だと思うので、
↓こういう状態に戻していただけますか。きれいさっぱり。
はい、ありがとうございます。
チェックを2つに分けて行うと言っていました。
数字かどうかを確認し
その数字が月として有効かどうかを確認する
の2段階です。
さきほど「関数」について説明したばかりですし、早速数字かどうかを確認できる関数に出てきてもらいましょう。
こちらです。
IsNumeric関数のお出ましです。
「関数とは?」の項で関数がそもそも何なのかの説明はしたのですが、実は使い方に関してはまだ少し説明不足なんです。それをここで補わせてください。
キーワードは引数と戻り値です。
IsNumeric関数は与えられた値が数値かどうかを判定しその結果を返す、という働きをします。ここでいう「与えられた値」が引数で、「その結果」が戻り値です。
次のソースを中に書いてください。
Dim result1 As Boolean
Dim result2 As Boolean
result1 = IsNumeric(123)
result2 = IsNumeric("あいうえお")
Debug.Print "123の検証結果は・・・" & result1
Debug.Print "あいうえおの検証結果は・・・" & result2
123と"あいうえお"が引数です。では実行します。
はい、いかがでしょうか。解説しますね。まず・・・
Dim result1 As Boolean
Dim result2 As Boolean
Boolean型の変数を2つ宣言しています。ここは問題ないでしょう。変数の宣言は#3で習いました。型がBooleanだ、というだけです。
変数名のresultには「結果」という意味があります。
Boolean型は真偽を表す型だ、という話をここまでにしてきました。この型が許容できるものは真か偽か、この2つだけです。その真と偽が具体的にどんな値で表現されるか?と言いますと・・・
TrueとFalseです。
真の愛、真実の愛のことをTrue Loveとか言いますね。そのTrueです。Falseは・・・あまり使われている言葉はないかな。偽はFalseで表現します。
では次の2行を見てみます。
result1 = IsNumeric(123)
result2 = IsNumeric("あいうえお")
先ほど私、
といいました。ちょっとIsNumeric関数になったつもりで聞いてください。
result1 = IsNumeric(123)
result2 = IsNumeric("あいうえお")
IsNumeric関数的には引数待ちなんですね。なにか値をおくれよと。
これに対し、1行目では123を、2行目では"あいうえお"を与えています。
じゃあその値が数字かどうかを判定するからちょっと待っててね。結果が出たらそっちに戻すからさ。
という流れを経ます。
値が戻ってくるということは当然その受け皿が必要です。それが最初に宣言したresult1, result2の変数ですね。
result1 = IsNumeric(123)
result2 = IsNumeric("あいうえお")
result1, result2にはそれぞれIsNumeric関数からの戻り値が代入されます。
では最後にIsNumeric関数がどんな判定をしたのか、見てみましょう。
Debug.Print "123の検証結果は・・・" & result1
Debug.Print "あいうえおの検証結果は・・・" & result2
今回は分かりやすいように、変数の前にテキストを付けました。こういうことはたまにやります。
で、結果として
123の検証結果は・・・True
あいうえおの検証結果は・・・False
この2行がイミディエイトウィンドウに出力されました。その通りですね。123は数値だからTrue、"あいうえお"は数値ではないからFalseです。
少し冗長になりましたが、これが関数の使い方です。
で、次でいよいよIf文とこのIsNumeric関数を組み合わせて使うのですが、その前にもうひとつだけ、少しテクニカルな内容をお伝えさせてください。
テクニカルと言っても慣れたらそれが至極当たり前になります。今ね、
Dim result1 As Boolean
Dim result2 As Boolean
result1 = IsNumeric(123)
result2 = IsNumeric("あいうえお")
Debug.Print "123の検証結果は・・・" & result1
Debug.Print "あいうえおの検証結果は・・・" & result2
このソース、IsNumeric関数の戻り値を変数に代入するというやり方をしましたよね。もっとコンパクトにすることもできるんです。
先ほどイミディエイトウィンドウにて、変数result1が「True」という値を持っていることが分かったのでした。それはIsNumeric(123)が「True」を返してきたからですね。
と、いうことはですよ?「IsNumeric(123)」はイコール「True」なんです。「IsNumeric(123)」の「I」から「)」までの14文字がもう「True」と同義なんです。
result1 = IsNumeric(123)
このような式(代入)ってプログラミングでは右から左に読むんだよ、と#3で伝えましたが、結局イコールはイコールなんです。イコールが本来持つ左辺と右辺は同じ値を持っている、という意味も現役です。
変数result1が「True」という値を持っているということは「IsNumeric(123)」もその中身は「True」なんです。
つまり、下図のようなことができます。
先ほどまでの変数宣言に始まり、IsNumeric関数の戻り値を代入し、Debug.Printで出力していた処理は
Debug.Print "123の検証結果は・・・" & IsNumeric(123)
Debug.Print "あいうえおの検証結果は・・・" & IsNumeric("あいうえお")
この2行に縮めることができます。
result1 = IsNumeric(123)
result2 = IsNumeric("あいうえお")
さっきも言いましたが、こういうソースを「代入だ代入だ」ってお伝えしているので、右から左に入れることばかりに意識が向いてしまうのですが、この数式自体は左辺と右辺は等価だよ、という基本的な話なんですよね。
だからこれに基づくと
Debug.Print "123の検証結果は・・・" & IsNumeric(123)
Debug.Print "あいうえおの検証結果は・・・" & IsNumeric("あいうえお")
このように、変数を宣言&代入してからDebug.Printに渡すという遠回りをショートカットすることができます。
お待たせしました。これでいよいよ、今度こそ本当に「E_カレンダー3()」の実装に入れます!
数値チェックを実装しよう
ではすみません。もう一度、以下のようにきれいすっきりな状態にしていただけますか。
はい、ありがとうございます。ここに以下を入力してください。
If IsNumeric(Cells(1, 3).Value) Then
MsgBox "月の値が不正です。" & vbCrLf & "C1セルに月を示す数字のみを入力ください。"
Cells(1, 3).Select
Exit Sub
End If
ここまでの話を受けて、If文の1行についてはすんなり理解できるのではないかと思います。ちょっと複雑に見えはするのですが、
If IsNumeric(Cells(1, 3).Value) Then
この1行。IsNumeric関数にプロパティを渡しています。ただ、結局はこの「Cells(1, 3).Value」も実態はC1セルに入力された値でしかないので、「3」と入力されていれば
If IsNumeric(3) Then
と同じ意味になります。ではね、試しになにか数値を入れて実行してみてほしいんです。やってみますね。
えぇぇぇぇぇえ!?!?正しい値を入れたのにエラー!?・・・というのは芝居でして、これは次に演算子の説明がしたく、そのための導入です。
まず上図のGif画像ではC1セルに数値である「3」を入力し、その上で処理を動かしてみました。ここでの期待値はエラーが発生しない、です。数値入れましたからね。後続処理に進むにあたって問題のない値なはずですからね。
ここにちょっとした引っ掛けがありまして。まずIf文のおさらいなのですが、
If [条件式] Then
[任意の処理]
End If
この構文において、Ifの中にある[任意の処理]に進むのは[条件式]の結果がTrueだったときなんですよね。
で、IsNumeric関数は与えられた値(引数)が数値かどうかを検証し結果を返す関数です。引数が数値だったら「数値だよ」ということなのでTrueを返します。
でも今回の処理で[任意の処理]に進みたいのは引数が数値ではなかったとき、なんですよね。逆なんです。
ここまで習った知識を使うとしたら
If IsNumeric(Cells(1, 3).Value) Then
Else
MsgBox "月の値が不正です。" & vbCrLf & "C1セルに月を示す数字のみを入力ください。"
Cells(1, 3).Select
Exit Sub
End If
こんなことができるでしょう。これはこれでひとつの手ではあります。
ただ不自然です。Trueだった場合になにも処理を書いていませんからね。
ここでやっと演算子の登場なんです!
演算子とは?
演算子とはプログラミング上の各種計算の際に使用する記号のことを言います。
算数の世界では足し算、引き算、掛け算、割り算等のことを「計算」という言葉で表現しますが、プログラミングの世界ではその各種計算に変数や定数、果ては関数を用いることもあり、これを「演算」といいます。
演算時に用いる各種記号、それが演算子です。
演算子にはいろいろ種類がありまして
算術演算子
比較演算子
論理演算子
代入演算子
・・・などです。まま数があり、いきなりすべてを把握しようとするのは得策ではありません。ですので、使用の機会が訪れたタイミングで解説とともにお伝えします(ほとんど使わない、というようなものもありますしね)。
今回はIf文の条件式の結果を反転させたい、という話でしたね。数値ではなかったときにIfの中の処理を行いたいと。こういうときにぴったりの演算子があるんです。
それがNot演算子です。否定を表す英単語と言えばNotですよね。
これをね、「If」と「IsNumeric」の間に挿入してください。以下のようになります。
If Not IsNumeric(Cells(1, 3).Value) Then
MsgBox "月の値が不正です。" & vbCrLf & "C1セルに月を示す数字のみを入力ください。"
Cells(1, 3).Select
Exit Sub
End If
これで実行してみると・・・(先に言っておきますが、何も起こらない、が期待値です。Ifの中に入らず抜けていくわけですからね)。
はい、この動作をみて数値を入れたときはIfの中に入らなかったことが分かります。
OK、いいでしょう。
少しキリが悪いですが今回はここで終わりにします。
[Ctrl] + [S]キーで保存しておいてください。
今回のふりかえり
「あまり進まなかったな」という感想をお持ちかもしれません。
ええ、そうですね。カレンダーLv.3の実装具合からするとそう思われても無理はありません。でも大切な知識を得る回でした。今回は・・・
If、ElseIf、Elseの書き方
エラーチェックとはどういうものか
関数(組込関数/自作関数)とはなにか
IsNumeric()関数のはたらき
引数の渡し方、戻り値の受け取り方
演算子とはなにか
Not演算子の使い方
これらのことを学びました。どれもめちゃくちゃ大事です。非常に有意義な回でした。もう最高。最The高。最&高。最of高。
今回の補足
今回の補足です。読み物として楽しんでいってください。
エラーチェックの種類
「エラーチェック」というものが初めて出てきましたね。今回実装いただいたものは
数値かどうか
を見るものでした。データ型をチェックしています。
エラーチェックには状況に応じていろんなものがあるので、簡単に触れておきます。
相関チェック・・・複数項目の入力値について相関関係が守られているかをチェックします。本編で少し触れた、問診票にて「飲酒する」にチェックが入っているとき、飲酒量の欄に入力があるかどうか?は相関チェックです。
範囲チェック・・・入力値が所定の範囲内に収まっているかどうかをチェックします。次回実装いただく、数値が1~12の間かどうか?もこれに該当します。From-Toチェックと言ったりもします。
重複チェック・・・複数のデータ間で値が重複していないかどうかをチェックします。ユーザを管理するシステムの場合、ユーザIDが被っていないか?などが代表例です。#Xで個人サイトに実装します。
必須チェック・・・値が必要な項目に値が設定されているかどうかをチェックします。これはデータベースを扱いだすとイメージしやすいです。データベースの登場は#Xです。
一意チェック・・・複数データの間で値が一意(他と被らない唯一の値)かどうかをチェックします。重複と同じ意味ですが、文脈によって使い分けたりします。一意のことはUNIQUEと言います。
形式チェック・・・入力された値が、想定する形式になっているかどうかをチェックします。例えば、郵便番号なら「XXX-XXXX」形式に、日付なら「YYYY/MM/DD」形式に適合するか、などがあります。
入力チェックの一例を紹介しました。
また、入力チェックのことをバリデーションとも言います。私も今知ったのですが、入力チェックとバリデーションではわずかに言葉の意味が異なるらしいので、興味のある方は以下のリンクを覗いてみてください。
知らなくても平気な内容ではあります。
組込関数の実体
「組込関数」と言ってもなにかしらの動作をするからにはそのプログラムがどこかに存在するはずなのですが、MsgBox関数にしてもIsNumeric関数にしてもそれを見てはいませんよね、我々は。
実は、特になにも設定しなくても利用できる関数が設定されている場所があるんです。ですが、これは特に意識する必要はありませんので、「そういう仕組みがあるんだね」程度で抑えておいてください。
下図をご覧ください。
ツールから「参照設定」をクリックするとライブラリファイルの一覧が表示されているダイアログのが出てきます。
「ライブラリ(library)」というのは日本語では図書館という意味ですね。書物が保管されている場所を想像していただくといいのですが、プログラミングにおいては、この書物を関数と解釈してください。
で、関数の数は膨大なので必要なものだけを使うようにし、不要なものはその書物(関数)にアクセスできないようにしておくと無駄なものを読み込まなくて良いので、軽い動作を期待できるというわけです。
デフォルトでは4つのチェックボックスがONとなっており、これだけで基本的には事足ります。
一応、公式リファレンスです↓。特に見なくても良しです。てかごちゃごちゃ書いてあって小難しいのでね。
この設定画面は#12で正規表現を扱うときに再度触れます。
Not演算子を使わない場合のもう一つの記法
本編でNot演算子をお伝えするとき・・・
If IsNumeric(Cells(1, 3).Value) Then
Else
MsgBox "月の値が不正です。" & vbCrLf & "C1セルに月を示す数字のみを入力ください。"
Cells(1, 3).Select
Exit Sub
End If
この↑書き方だとIfがTrueだったときになにもしてなくて不自然だからNot演算子を使おう、という流れで説明しました。
実は上記の書き方をしなくても条件式の結果がfalseの時に Ifの中の処理に進む書き方もあります。それを補足説明させてください。
以下のソースコードです。
If False = IsNumeric(Cells(1, 3).Value) Then
MsgBox "月の値が不正です。" & vbCrLf & "C1セルに月を示す数字のみを入力ください。"
Cells(1, 3).Select
Exit Sub
End If
IsNumeric関数が戻してくれる結果がFalseと一致するかどうか?という条件式にしています。こうすることでFalseと一致する、ということは結果としてこれは「True」と判定することができます。
ただ、基本的にはBoolean型を返してくれる関数はTrue・Falseと比較する書き方はしないでそのまま戻り値を利用することを推奨します。
If Not IsNumeric(Cells(1, 3).Value) Then
この↑書き方ですね。
どうしてかっていうと、Boolean型の変数とTrue/Falseをわざわざ比較するというのは初学者がやりがちな実装なんです。余計なことをしているのであまり美しくないんですね。気をつけよう。
条件式を「評価」すると言う
今回の本編中でも使っているのですが、If文の動きについて説明するとき、記載された条件式がTrueなのかFalseなのかを判定することを「評価する」という言い回しをします。
↑他の言語のページですが、参考までに。「評価する」という言い回しは一般的なのですよ、の意味です。
私がこの業界に入ってから「評価する」という言い回しに出会うまで時間がかかったこともあり、当初違和感というか不慣れさがありました。
なので、念押しとしての案内です。後続の記事でも当たり前みたいに使ってます!評価ドヤァです!
おわりに
おわりです!お疲れさまでした。
サクサクとテンポよくいきたかったのですが、基礎基本のところは丁寧に理解していただきたいので、今回も慎重に説明をしました。
ある程度、基礎の土台が整えばあとは応用の連続なのでサクサク進むようになります。今は少しじれったさを感じヤキモキするかもしれませんが、最初のうちだけだと思ってついてきていただけると幸いです。
カレンダーLv.3の実装も途中なことですし、次行きましょう。
ゆっくり休んで、リフレッシュしてください。
今回もありがとうございました。