見出し画像

プログラムの読み方

ITサポーターTsuchidaの土田です。今ではネット上でプログラムのサンプルを見かけるようになりました。サンプルをアップしている人はある程度スキルを持っている人で、そこそこのコードを書けます。とはいえサンプルなので、すべてのコードをアップしているわけではなく、使いまわしのきく一部のコードのアップなのです。

まずプログラムを読むには、このプログラムの大よその流れをまず考えます。この大よその流れがわかればプログラムは読みやすくなります。大よその流れがわかるとプログラミングにも役立ちます。その他に、基本的にプログラムは上から下に流れるように記述します。50年くらい前は下から上に戻るような記述があって、それではわかりづらいということで、下から上に流れるような記述をする人はなくなりました。

例えばExcelVBAで一番代表的な処理として、読み込み用のブックを開いて、ブックの中のシートを先頭行か各行のデータ編集をした結果を新しいブックのシートに出力し、最終行まで繰り返し、最後に新しいブックに名前を付けて保存するという処理があります。

最初に行うのは、読み込みブックを開く処理になります。ブックというファイルは、ディスクに保存されているので、開くと処理でディスクのデータがメモリに展開します。ブックを開くには、ブックにファイル名がわからないと開けません。そのためには、ブックのファイル名が必要になります。ファイルの名前がわかれば、Workbooks.Open(ファイル名)で開けます。

もしブックのファイル名が毎回違って、ファイルを選択したい場合は、Application.GetOpenFileName(ファイルの種類)でダイアログを表示して、選択したファイル名を取得後に、Workbooks.Openで開くことができます。読み込みファイルを開くという処理は必ず一番最初に行います。この時に同時に、出力用の新しいブックをWorkbooks.Addで新規作成を行います。これで読み込みブックと出力ブックがExcelで使用ができるようになります。

2つのブックが用意できれば、後は読込用のブックの先頭行から最終行まで処理を繰り返します。大体、For Nextステートメントを使って、各行の一連の処理を繰り返します。

For 変数 = 先頭行 to 最終行
 各行の一連の処理
Next

ちなみに読み込みがCSVファイルだったりすると、Do Loopステートメントで繰り返しの処理を行います。

Do Until EOF(csvの番号)
 CSV一行ごとの一連の処理
Loop

この繰り返しの処理がVBAでやりたいことなので、この処理で何をやるかをVBAでコードを書きます。私もVBAでコードを書くときは、For NextやDo Loopの中にいろんな記述をします。

一番最後に行うのは、出力のブックを名前を付けて保存します。名前を付けて保存しないと、メモリ上に表示されているだけで、ディスクには保存されません。デバックの間は、出力結果に問題がないかを画面で確かめればいいのですが、実際に使ってもらうには、ファイルの保存は必須となります。出力ブック.SaveAs 出力ファイル名にすると、出力ファイル名でディスクに保存されます。GetSaveAsFilenameで名前を付けて保存のダイアログで毎回ファイル名を指定して保存もできます。保存が終わったら、読み込みブックや出力ブックなどメモリに表示されたブックの画面を閉じるためにクローズします。

大まかな流れは、ブックのオープン→一連の処理→ブックのクローズです。プログラムは上から下の読むものですが、その際に気を付けるのは、1行ずつ読むのではなく、ブロックを意識して読むことです。For NextやDo Loopのように一連の処理を繰り返すというのは、ブロックの中は何度も繰り返すので、ブロック単位で処理を読む必要があります。

特定の編集に特化した処理や複数個所で共通に使う処理は、専用のプロシージャにします。専用のプロシージャを呼びだすとそのプロシージャが完了するまで、呼び出し元は待つのです。ブロックを意識したり、呼び出したプロシージャの処理を待つと考え方は、スタックと呼ばれ、スタックポインタに戻るというプログラム独特の考え方です。VBAに限らずどのプログラム言語でも共通しています。スタックの説明に在庫の後入れ先出しのイメージなのですが、呼び出した場合は必ず戻るものだと思ってプログラムを読むと処理がつながっていきます。

メインの処理は上から下に流れて、途中繰り返しのループやプロシージャの呼び出しがわかれば、あとは個々の処理で何をやっているかを解析でできればプログラムを読むスキルは上がります。

プログラムを読むスキルがプログラミングスキルとは必ずしも一致しません。同じ環境で同じようなプログラミングをしている人は案外プログラムを読むスキルがなかったりします。逆にプログラムを読むスキルがあっても、いざ自分がプログラミングをすると、意外とエラーが出るものです。

私が新人だった頃って、新人教育用のテキストがあって、まずはそのテキストに従ってプログラミングをしたので当時は読むスキルはなかったのです。ただ、実務に入っていざプログラミングをしてみると、テキストの内容では不十分でマニュアルを読んだり、他の人のプログラムを参考にします。他の人のプログラムを読むと新しい発見ができます。プログラミングスキルとプログラムを読むスキルは同時並行で身につけるべきだと思っています。

でもプログラムを読むところで挫折すると、プログラミングスキルとプログラムを読むスキルが身に付きませんよね。そんな時には、これは何をやっているんですかと質問したくなります。そんな質問したいときはぜひ掲示板をご利用ください。

https://note.com/it_supo_tsuchi/circle/boards/7fcf9b7cba2d/posts/304e601878bc






この記事が気に入ったらサポートをしてみませんか?