30日間1日1本マクロ生活、15日目です。
30日の半分、15日目までたどり着きました。頑張って続けることができています。
マクロを書く準備は、0日目に記事を書きました。
マクロを書く準備早速マクロを書こうと思ったんですが、マクロって何?食えんの?って人もいると思うんで、丁寧に行こうかな、と。マクロってのは、通常は人間の手でやるような作業を、プログラムを書くことで機械に自動的にやらせるってことです。Excelの場合はVBA(Visual Basic for Application)という言語を使ってマクロを書きます。まずはその準備を。Excelを起動すると、ワークシートが現れます。ここでキーボードの「ALT+」を押してください。はキーボードの上方にあるファンクションキーの11番です。すると、このウィンドウが開... 0日目 マクロを書く準備をしよう【30日間1日1本マクロ生活】 - わたしの日常に価値はありますか? |
素数の判定
昨日は、2と3以外の素数はすべて6で割って1余る数か5余る数のどちらかだという話をしました。
さらに、自分自身の平方根よりも小さい全ての数で割り切れなければ、その数は素数だという話をしました。
30日間1日1本マクロ生活、14日目です。マクロを書く準備は、0日目に記事を書きました。素数の判定昨日は、エラトステネスの篩で100以下の素数だけを表に残すということをやりました。そのときに残った表がこれです。この表に残っているのは、素数だけです。そして、意図的に数字6個で改行をしています。6で割って1余る数と5余る数どうですか。2と3以外の素数は、6で割って1余る数と、6で割って5余る数だけが残っているのが分かりますか?そりゃそうですよね。素数というのは、1と自分自身以外では割り切れない数です。6の倍数は、当た... 14日目 素数の判定【30日間1日1本マクロ生活】 - わたしの日常に価値はありますか? |
Function
ここまで、マクロを書くときは「Sub」で始まって「End Sub」で終わるというお話をしていました。
今日のマクロはSubの代わりに「Function」で始まります。
「Sub」は書かれているマクロを書かれている通りに実行するタイプのマクロです。
「Function」は新しく関数を作るタイプのマクロです。
さっそくコードを
Function sosu(n)
If n
解説します。
1行目の「Function sosu(n)」です。ここから「End Function」までの間に、新しい関数「sosu」の処理を書きます。
「(n)」は、この関数には1つの数を与えますよ、という意味です。
例えば「sosu(13)」で「13が素数なのか調べる」という意味になります。ここで13はnに代入された状態でマクロが進みます。
Exit Function
2行目、nが1以下の数だったら、素数ではありませんね。
そのときは、関数の返り値に「False」を返します。
Exit Functionは、この先のマクロを実行せずに終わるという意味です。
3行目、nが2か3か5ならば素数です。「True」を返します。
ElseIf
「Else」と「If」を合体させた「ElseIf」は便利ですよ。
通常ならば
If ○○ Then
Aの処理
Else
If ○○ Then
Bの処理
Else
If ○○ Then
Cの処理
Else
Dの処理
End If
End If
End If
と、「If」の数だけ「End If」が必要です。
でも、「ElseIf」を使うと
If ○○ Then
Aの処理
ElseIf ○○ Then
Bの処理
ElseIf ○○ Then
Cの処理
Else
Dの処理
End If
というように、End Ifが一つで済みます。
実行結果
「Sub」型のマクロであれば、マクロを記述するウィンドウの「Sub」と「End Sub」の間にカーソルを置いて、画面上方の再生ボタン的なアイコン(右向きの三角形)をクリックするか、[F5]キーを押して実行しますが、「Function」の場合は実際にワークシートにその関数を書くことができます。
Aの列に乱数で10000までの中から適当な数を並べてみました。
Bの列には「=sosu(A1)」と、通常の関数と同じように入力します。
結果です。素数の場合は「TRUE」、素数でない場合は「FALSE」が返されています。
このように、Excelのマクロでは自分でオリジナルの関数を作ることも可能です。
Excelは便利
悔しいですが、Excelは便利です。
Microsoftにお金を払うのは癪でしょうがないんですが、Excelばかりは仕方がない。
マクロを書くようになると、Excelからは離れられないですね。
30日間、頑張ります。