見出し画像

個サ作 #6 カレンダーLv.3 前半

こんにちは。

前回はカレンダーLv.1と2を完成させました。順次処理と反復処理、その他諸々をやったのでしたね。

今回は条件分岐による処理を実装します。その名の通り、○○だったら△△の処理を行う、というようなものです。

この分岐処理のタイミングで組込関数くみこみかんすう演算子えんざんしについても学びます。

これまでの順次処理、反復処理ではそれだけでも機能したのですが、分岐処理ではどんな条件で分岐させるか?を実装する際に関数かんすう演算子えんざんしを使うシーンがとても多いんですね。ですので、この機会に一緒にやっちゃいます。

では、参りましょう。


今回のゴール

今回は以下のことができるところまで実装します。

最初に縮尺を上げてます。

説明が多くて手を動かすことは少ないので進捗はあまりありませんが、その分たくさんの知識を獲得します。


カレンダーLv.3 前編

下図がカレンダー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の間かどうかですね。こちらもひとつめ同様エラーに抵触すれば処理を終了します。


実装したいエラーチェックの動きについては上記の通りです。それでは早速実装したいのですが、これをするには

  1. if文の書き方を学ぶ

  2. 関数及び組込関数を学ぶ

  3. 演算子を学ぶ

  4. 上記3つを組み合わせる

と、段階を踏まねばなりません。順番に行きましょう。


if文の書き方

では、少し手を動かしましょう。まずはカレンダーLv.3のがわを作ります。以下のソースコードを前回の続きから書いてください。

'分岐処理と関数、演算子の学習
Sub E_カレンダー3()

End Sub
赤枠のソースコードをあなたの環境にも反映してね

はい、ありがとうございます。

ではですね、一旦カレンダーのことは忘れまして、ifイフ文の書き方についてお伝えします。構文は以下です。

If [条件式] Then
    [任意の処理]
End If

はい、とてもシンプルかと思います。英単語「If」には「もしも・・・だったら~」という意味があります。そして「ThenTHェン」には「そのとき~」という意味があります。

ですので、もしも[条件式]の評価が真だったら[任意の処理]を実行する、という読み方ができます。

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月の分岐に入る処理を実行する様子

今度はイミディエイトウィンドウに「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つに分けて行うと言っていました。

  1. 数字かどうかを確認し

  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関数は与えられた値が数値かどうかを判定しその結果を返す、という働きをします。ここでいう「与えられた値」引数で、「その結果」戻り値です。

といいました。ちょっと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()」の実装に入れます!


数値チェックを実装しよう

ではすみません。もう一度、以下のようにきれいすっきりな状態にしていただけますか。

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つだけです。

デフォルトでは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の実装も途中なことですし、次行きましょう。

ゆっくり休んで、リフレッシュしてください。

今回もありがとうございました。


いいなと思ったら応援しよう!