【スキマ学習】ガチ初心者と一緒に、Excelでnoteのタグ解析ができるツールを作ってみよう《2》
ご好評につき本日も更新しようと思います。
前回、コピペで済ませてしまったコードが実際どんな仕組みで動いているのか、一個ずつ解説して参ります。
できるだけ専門用語を少なくするよう努めるので、プログラミングってカタカナと英語ばっかりでさっぱり分からん!という方も、是非覗いて行ってください。
・会社にいてもちょっとしたスキマ時間に実践できるよう、一回の分量をなるべく少なくしてお送りします。
・特別な準備は要りません。オフィスのPCにだいたい入ってるエクセルとGoogleクロームだけを使って作ります。記事も無料です。
前回の記事はこちら
今回の内容はこんな感じです↓
プログラムとは素直過ぎる子供のようなもの
※前置きです。忙しい方はスキップして下さい。
まず覚悟というか、知っておいていただきたいことは、プログラミングに失敗はつきものだということです。
プロだろうがアマだろうが、一つの仕組みを仕上げるのに必ず一回は何かしらの躓きを経験します。
しかしこれは作り手に問題があるのではなく、人間の脳の働きと、言語で記述されたプログラムの働きに大きな違いがあるためです。
例えば「おむすびを食べる」時、私たちの脳は特に具体的な作業を意識しなくても、持ち上げ、口に運び、一口分をかじって、咀嚼し、飲み込むという一連の動作を実行することができます。
しかしこれをプログラムしようと思うと大変です。まずおむすびとは何かを定義して、おむすびとそうでないものを区別するところから始めないといけません。
定義がうまくできたとして、次はこれを口に運ぶ必要がありますね。そうなると、「口に運ぶ」とはどういうことかを教えてあげないといけません。
口に運ぶには、口とおむすびの距離が一定以上離れている場合に、右肩、右肘の関節を動かす筋肉に指令を与えて、腕全体をおむすびに向かって伸ばし、それぞれの指の第一関節と第二関節を開くための筋肉を操作しつつ、おにぎりの見た目から重心を計算して指を置くのに適切な場所を割り出し、再度筋肉を動かしつつおむすびをつぶさず、かつ持ち上げることのできる力のかけ具合を計算したのち、それぞれの指に力を均等に分散s
...はい。こうなります。
これでもかなり端折って書いていることになると思います。世の中でロボットをプログラムして動かしている方々って本当にすごいんですね。
私たちが自分の組んだプログラムと向き合う際、彼らは本当に何も知らない、純粋無垢な子供のようなものであることを理解して接する必要があります。
当然、教えていないことは知りませんし、やったことのないことはできません。俗に言うエラーやバグというものは、プログラムが「〇〇ってなに!?知らない!できない!」と私たちに教えてくれている重要なサインなのです。
とにかく読みやすく書く
こういったすれ違いを少しでも減らすためにとても重要なことがあります。それは、人間の目で見てチェックしやすいよう、コードをきれいに記述するということです。
何かエラーが起こった際、機械は必ずしもどこで問題があったかを正しく伝えてくれるとは限りません。
人間が出来上がったコードを自分の目で見て、「こういうエラーが出るということは、ここがこうなってしまったからだ」と判断し、正しく修正してあげる必要があります。
一方で、人間だけが分かる言葉で書いても当然機械は動きません。それぞれの機械に設定されたプログラミング言語の文法に従って、決められたルールの中で書いていく必要があります。
つまりプログラミング言語とは、機械を動かすための命令を、ギリギリ人間でも読むことができるようにまとめ上げた、通訳のための共通言語だったわけです。
前回のコードの意味
Sub test()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim rg As Range
Set rg = Range("A1")
Dim message As String
message = "こんにちは"
rg.Value = message
End Sub
前回、A1のセルに「こんにちは」と入力した手続きを記述したコードです。
「test」という名前が付いていますね。
コードをきれいに書いていくためのポイントの一つとして、インデントがあります。上のように、行の開始位置を少しずつずらして書くという方法です。
これは、「test」という大きな命令の中に、Dimとかsetといった細かい命令が書かれていて、最後にEndで閉じている、サンドイッチのような構造になっています。
ちょうど、おむすびの例で言うところの「おむすびを持つ」くらいの粗い命令の中身について、「おむすびとは何か」とか、「肩の筋肉はこう動かせ」等の詳しい命令が組み込まれていると考えてください。
このように、まとまりごとに正しくインデントをすることによって、どこからどこまでがひとつの大きなくくりなのかが読み取りやすくなります。
それでは、ここから一つ一つの行を解説していきますが、細かいカタカナ用語やアルファベットについては、まだ覚えなくても大丈夫です。
じっくり行きましょう。
Sub
Sub test()
End Sub
Sub は、「ここから大きな命令のまとまりをはじめます」という宣言です(Sub Routineの略です)。
なんでサブなの?という方、鋭いですが、そこに入るとちょっと面倒なので一旦忘れるか、個人的に検索してみてください。
書き方:
Sub [任意の手続き名] ()
~細かい命令~
End Sub
DimとSet
Dim ws As Worksheet
Set ws = ActiveSheet
コードの中には、よく変数が登場します。
ああ、待って下さい!「変数」と聞いた途端に顔をしかめないで下さい!
プログラムを組むにあたっての変数は、数学の x や y と性質としては同じですが、とっても重要な役割があります。
というのも、人間にとって「おむすび」といえば、だいたいこんな感じ、という共通のイメージがありますが、残念ながら機械にイメージは伝わりません。
おむすびについて毎回、「おむすびを持って、あ、おむすびっていうのはね~」と説明していては日が暮れてしまいます。
これを解消するために、「これをおむすびと言います」と事前に変数を作ってあげて、何度も説明する手間を省く必要があるのです。
Dimはコードの中で「~という変数を~という形で使うよ」という宣言です(Dimensionの略)。
Setは、Dimで宣言した変数について、「~は~という意味だよ」と設定してあげる命令です(”セットする”のSetです)。
つまり、上の画像の赤い部分のコードでは、機械に下のような命令を届けています。
Dim ws As Worksheet
Set ws = ActiveSheet
「今回はwsという変数をエクセルのワークシートの形で使うよ」
「wsは、現在エクセルで開いている(アクティブな)シートだよ」
これらの命令によって、エクセルという機械が、今回のプログラムで「こんにちは」と入力するべきシートを特定できるという仕組みです。
書き方:
Dim [任意の変数名] As [変数の形式]
Set [↑の変数名] = [変数にセットするもの]
Dim rg As Range
Set rg = Range("A1")
続くこちらのコードも、似たような文法になっていますね。
どうでしょう、もしかしたら想像がついてしまうかもしれませんが、こんな命令を送っています。
「今回はrgという変数をエクセルのセル領域(Range)の形で使うよ」
「rgは、現在の(アクティブな)シートのA1というセルだよ」
これで、「こんにちは」というメッセージを表示するセルまでが特定できました。
どんどん行きましょう。下のコードはどうでしょうか。そろそろ仕組みが分かって頂けると思います。ちなみにStringは文字列という意味です。
Dim message As String
message = "こんにちは"
「今回はmessageという変数を文字列の形で使うよ」
「messageは、”こんにちは”だよ」
これで、機械に「messageっていうのは”こんにちは”のことなんだな」と分かってもらうことができました。
オブジェクトとプロパティ
ちょっとやまびこさん、Setを忘れてますよ!
そうなんです。messageにはSetが要らないんです。この違いを簡単にご説明していこうと思うのですが、既に3000文字以上書いていますので、今回はここまでにしておきます。
中途半端で申し訳ございませんが、焦らずじっくり行きましょう。次回はここの話から始めようと思います。というのは、結構大事なポイントだからです。
できるだけ早く投稿できるよう努めますので、何卒宜しくお願い致します。
今回も、お疲れ様でした。
ご読了ありがとうございました。
こんなやまびこですが、人生の時間をほんのちょっとだけ分けてあげてもいいよという方は、フォローを頂けると大変喜びます。
【だいたい平日18時頃に更新中】
Twitter:
https://twitter.com/echoyamabiko
@echoyamabiko
note:
https://note.com/echo_yamabiko
はてなブログ:
https://echo-yamabiko.hatenablog.com/
※内容は基本的に同じなので、一番身近なアカウントでのフォローをお勧め致します。
【匿名での質問や感想はこちらが便利です】
記事は基本無料公開にしようと思うので、やまびこの明日のコーヒー代くらいは恵んでやってもいいぜという方は、お気軽にご支援ください。気長にお待ちしております。