長いものには巻かれない

常識は非常識かもしれないと考えてみる

Excelで覚える簡単プログラミング。連載シリーズ続編!

If とSelect Case を取り上げます。宿題だった星座を求める関数のコードサンプル付きです。プログラミングはExcelから入るのがお勧め。

こんばんは。土日は子どもの世話で忙しいなほちゃんです。
月曜日になってホッとしていますが、もうすぐ冬休みなので憂鬱。
その前にクリスマスもあるし、正月もあるので、どよーん。
早く来い来い3学期。

お待たせしました!久々のExcelネタです。
前回は「繰り返し」を解説しましたので、今回は「条件分岐」編になります。
是非、Excelで試してみてくださいね!

前回のお話をまだ読んでない方は、こちらからご覧ください。

nagaimono.hateblo.jp

 今回は、こんなのを作りますよ!!

f:id:komanaho:20161219200853j:plain

質問の答えが2種類の時は、IF 文を使う

ExcelにはIF関数があるので、IFだけ使いたいのであれば、わざわざマクロを組む必要はありません。今回は、プログラミングの基本を説明するために IFを取り上げますので、あまり実用的ではないですが、ご了承ください。

さて、プログラミングでは状況に応じて処理を分けることが頻繁にあります。

例えば、性別によって異なる処理をさせたいとき、Excelでは、IFを使って次のように書きます(Excel では大文字・小文字のどちらで入力しても先頭だけ大文字に変換されます)

If 性別=男 Then
  ・・・男の場合の処理
Else
  ・・・女の場合の処理
End If

この書き方は、性別が男か女の2種類しかないことが前提になっています。

男か女以外の性別が想定されるのであれば、次のように書きます。

If 性別=男 Then
  ・・・男の場合の処理
Elseif 性別=女 Then
  ・・・女の場合の処理
Else
  ・・・男でも女でもない場合の処理
End If

条件が多い時は Select Case を使う

このように、3種類以上に分岐させたいときは、「Else If」を使って、条件をどんどん増やしていくことができますが、条件が増えれば増えるほど見にくくなってしまいます。そこで、Excel には、Select Case文が用意されています。

Slect Case  性別
 Case 男
  ・・・男の場合の処理
 Case 女
  ・・・女の場合の処理
 Case Else
  ・・・男でも女でもない場合の処理
End If

スッキリしましたね! プログラミングでは、なるべく見やすく書くことがバグを減らすポイントになります。

解説を省略しましたが、Select Case文は、関数のところで使いましたので、こちらもご参照ください。

nagaimono.hateblo.jp

実際に動かしてみよう!

ではExcelにコードを書いて動かしてみましょう。冒頭で紹介した「年齢を入れると、その年齢に応じたメッセージを表示させるプログラムです。

Excel を起動して、リボンから「開発」を選ぶ

リボンに「開発」がないときは、追加する方法を過去記事に書きましたので、そちらをご覧ください。

nagaimono.hateblo.jp

「コードの表示」をクリック

f:id:komanaho:20161212093856j:plain

標準モジュールを追加する

f:id:komanaho:20161212094210j:plain

標準モジュールにコードを入力

左側で「標準モジュール」の「Module1」が選ばれている状態で、右側にコードを入力します。コードはコピペでOKです。

f:id:komanaho:20161212094459j:plain

Sub ShowMessage()
    If Sheets(1).Range("A2").Value <= 30 Then
        MsgBox "若いですね!", vbInformation, "テスト"
    Else
        MsgBox "年寄りですね!", vbInformation, "テスト"
    End If
End Sub

※今回もコードを簡単にするため、エラーチェックなどは行ってませんが、ご了承ください。

ShowMessageはプログラムの名称です。Test とか Nenrei とか、何でもOKです。大文字小文字は区別されます。

Sub ShowMessage()

「Sheets(1)」はシートの左から1番目という意味です。前回は「Sheets("sheet1")」と書きました。この場合は、シートの名称を指定しています。
また、「Range("A2")」は「A2のセル」のことです。前回は「cells(1,1)」というように番号で指定しましたが、このような指定方法もあります。
「<= 30」は、入力された年齢が30歳以下という意味です。この30は適宜違う数字に置き換えてみてください。

If Sheets(1).Range("A2").Value <= 30 Then

 「MsgBox」は、Excelでメッセージを表示するための関数で、メッセージボックスと呼ばれるものです。引数(ひきすう)は3つ指定しています。(関数については、先ほどご紹介した過去記事をご参照くださいね)

引数1番目の「若いですね!」は表示するメッセージの内容。

引数2番目の「vbInformation」はメッセージボックスの種類。今回はただ情報を表示するためだけなので、このように指定しています。メッセージボックスには他に警告を出すものや、「はい」「いいえ」と答えを選ばせるようなものもあります。

引数3番目はメッセージボックスのタイトルに表示する言葉です。

MsgBox "若いですね!", vbInformation, "テスト"

 

Excelのメッセージボックス

Excelに戻って、ボタンを設定

今回は、このコードを実行するためのボタンを作ります。リボンで「開発」を選び、「挿入」の中から「フォームコントロール」の「ボタン」をクリックします。

f:id:komanaho:20161219215508j:plain

適当な場所でドラッグすると四角い枠が表示されます。マウスを離すと「マクロの登録」ダイアログボックスが表示されます。先ほど入力したプログラムの名前「ShowMessage」が表示されますので、クリックして選択し、OKで閉じます。

f:id:komanaho:20161219215550j:plain

ボタンの名前をドラッグするとカーソルが現れるので、ボタンの名前を「メッセージ表示」にします。

f:id:komanaho:20161219215656j:plain

A2セルをクリックし、適当な数字を入力して、このボタンをクリックしてください。メッセージが表示されれば成功です。メッセージはOKで閉じてください。

f:id:komanaho:20161219200853j:plain

星座名を表示する関数

さて、今回 Select Case を取り上げましたので、宿題「誕生日を入力すると星座を表示する関数を作ってみよう!」の回答です。色々やり方はあると思いますが、こんな感じでどうでしょう?

ちょっと難しいですね。

誕生日は年がマチマチなので、一律にするために、2016年に変換しています。その後、Select Case を使って、誕生日の範囲で星座を割り出しています。

Function GetSeiza(ymd As Date) As String
Dim y As String
Dim m As String
Dim d As String
Dim birthday As Date

y = "2016/"
m = Month(birthday) & "/"
d = Day(birthday)

birthday = y & m & d

Select Case True
    Case birthday >= "2016/3/21" And birthday <= "2016/4/20"
        GetSeiza = "牡羊座"
    Case birthday >= "2016/4/21" And birthday <= "2016/5/20"
        GetSeiza = "牡牛座"
    Case birthday >= "2016/5/21" And birthday <= "2016/6/21"
        GetSeiza = "双子座"
    Case birthday >= "2016/6/22" And birthday <= "2016/7/23"
        GetSeiza = "蟹座座"
    Case birthday >= "2016/7/24" And birthday <= "2016/8/23"
        GetSeiza = "獅子座"
    Case birthday >= "2016/8/24" And birthday <= "2016/9/23"
        GetSeiza = "乙女座"
    Case birthday >= "2016/9/24" And birthday <= "2016/10/23"
        GetSeiza = "天秤座"
    Case birthday >= "2016/10/24" And birthday <= "2016/11/22"
        GetSeiza = "蠍座"
    Case birthday >= "2016/11/23" And birthday <= "2016/12/22"
        GetSeiza = "射手座"
    Case birthday >= "2016/12/23" And birthday <= "2016/1/20"
        GetSeiza = "山羊座"
    Case birthday >= "2016/1/21" And birthday <= "2016/2/19"
        GetSeiza = "水瓶座"
    Case birthday >= "2016/2/20" And birthday <= "2016/3/20"
        GetSeiza = "魚座"
    Case Else
        GetSeiza = "星座なし"
End Select

End Function

Office のバージョンアップ検討中の方へ

ところで、今までなほちゃんは古いバージョンの Microsoft Office を使っていたのですが、このたび、ついにアップグレードしました!

なほちゃんは Access を使うので、当初は Office 365 Solo の導入を検討していましたが、Office 365 Solo は2台のPCにしかインストールできません。

どうしても3台以上必要なので、5台にインストールできる Office 365 Business を導入することにしました。月900円で5台使えるのは結構お得です。こちらには、Access はついていないので、Access は単体で購入しました。

Office 365 Business は、Amazon には売ってなくて(Amazon で売っているのは中国版なのでちょっと心配)マイクロソフトから購入するしかないのですが、ポイントサイトハピタスマイクロソフトのオンライショップを発見! ハピタス経由でマイクロソフトのオンライショップを利用すると3.6%ポイントがつきます(期間限定。通常は2.4%)

Officeのバージョンアップ検討中の方は是非。他にもネットショップを利用される方にはすごいお勧めです。ハピタスに登録されていない方は、以下から登録すると30ポイントつきますので、よろしく!

日々の生活にhappyをプラスする|ハピタス

Office 365 solo を購入される場合は Amazon ですね。12/31まで8%引きなので、こちらもどうぞ。