質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

4回答

10584閲覧

vbaにて、初期化処理、メイン処理、終了処理の考え方

nissanngtr34

総合スコア24

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2015/10/15 05:36

編集2015/10/15 05:50

皆様のアドバイスのおかげで、仕様書通りにひとまず動くものが作れるようになってきました。

しかし、私のプログラミングには問題があり、
初期化処理とメイン処理と終了処理3つに分けてプログラミングするべきと指導者から指摘がありました。
しかしイマイチ分かったようで分かってない気がしまして。難しく考えすぎなんでしょうか。

単純に、メイン処理で使われてる値を変数にし、初期化処理で値に初期値を記述すればよろしいのでしょうか?

例えばループ文ですと、今迄こういう記述だったものFor 1 to 5

これをメイン処理で For min to max 、初期化処理でmin=1 max=5に分けてやるということでしょうか?

仕様書を渡されただけで、初期化処理、メイン処理、終了処理の流れなんて思いつきません。
いつも作りながら必要な機能を考えてます。

機能毎に部品化し、作ってはすぐにデバッグで修正を繰り返し、作った部品を別のプロシージャで呼び出すといったことをしています。
前もって分かっているシート名やブック名はpublicで定数で宣言しています。

皆様な仕様書を渡さたらどのように考えて、プログラミングしていきますでしょうか?
アドバイスお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

皆様な仕様書を渡さたらどのように考えて、プログラミングしていきますでしょうか?

について

私の場合、コードにするときは品質確保のための「保守性」や「拡張性」などを常に考えています

いきあたりばったりで作成されたプログラムは、可読性も低く、仕様変更による修正や機能追加による改造への対応にも手間がかかり、バグを埋め込むリスクが高まります

逆に、「保守性」や「拡張性」の考慮された品質の高いプログラムは、可読性が高く、処理手順が明確で、修正が容易な構造になっており、部品も汎用的で改造拡張が効率的にできる、といったもので、バグの埋め込まれるリスクが極力低くなるよう作られています

「初期化処理とメイン処理と終了処理の3つに分ける」ということの意図は、「動けばよい、というだけでなく、どこで何をしているか誰が見てもわかるようにしなさい」ということではないでしょうか

for文の例を出されましたが、先ずやるべきことはそのようなところからでよいと思います

For 1 to 5

'初期化処理
Min = 1
Max = 5
'メイン処理
For Min to Max

例えば、、、もしもここに出てくる 1 と 5 を使うfor文が2箇所あったら、修正箇所も2箇所になりますね?

5 を 10 に変更する場合を考えてみてください


For 1 to 10 '←ここを修正
・・・
Next

For 1 to 10 '←こっちも修正
・・・
Next

2箇所あることを忘れて片方だけ修正したら、想定した処理が行われず「バグ」を作ることになりますね

初期化とメインで分かれていれば修正箇所は1箇所で済みます


'初期化処理
Min = 1
Max = 10 '←ここだけ修正しておしまい

'メイン処理
For Min to Max
・・・
Next

For Min to Max
・・・
Next


初期化処理の分だけコード量が増えているので一見非生産的に見えますが、品質を高めるうえではとても重要なことです

また可読性という点でも、1 と 5 という数字を見るより、その数字が何を意味しているかが変数(Min、Max)に表されていると、その処理が何をしたいかイメージしやすいですね

全てをそうすべきかというと、もちろんそうでないところもあります
それはやはりたくさんプログラムを書いて、誰かに評価してもらって、多くの経験を積んで解ってくる部分があります

がんばってください

投稿2015/10/15 07:49

takito

総合スコア3111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

どのような処理の仕様書を渡されているのかわからないですが、サブルーチンに分けて
処理を記述するということなのでしょうか?

例えばCOBOLですと
初期化処理
・ファイルのオープン
・ファイル読み込み件数等の変数の初期化
・処理開始メッセージ

メイン処理
・ファイルのRead
・Readしたデータに対する処理

終了処理
・ファイルのクローズ
・処理結果メッセージ

というように処理を分けてサブルーチンを作成するように教えられた記憶が
あります。

VBAに当てはめると、どのようになるかはいまいち分かりませんが…。

投稿2015/10/15 07:20

tomo.ina

総合スコア357

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

定数や、いろんな箇所で使うような値は変数をきってまとめておいたほうが、
後々仕様変更で修正しなくてはならない場合に容易に修正ができます。
for文とかのループ値は場合によっては変数のほうがいいかもしれませんね。

「だいたいは分かったけど、説明できるほどきちんと分かっていないので、こういうものだという例を出してもらえますか。」
など、聞いてみるのも手ですよ。
「分かる=どういうことか説明できる」でないと、分かったことにならないですから。

投稿2015/10/15 05:58

kaputaros

総合スコア1844

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaputaros

2015/10/16 00:28

追記です^^ こういうことですか?と確認するのも必要だと思います。 指導者の方が言わんとしていることが、ちゃんと伝わっているかが重要だとおもいます。 自己解釈のまま進めるのは、場合によってはキケンです。 うやむやなままでなくきちんと確認することは、仕事をしていく上でかなり重要です。 (自分もコレでかなり悩んだ時期があります。。。) もし、指導者の方が以前書かれたソースがあるのなら、 見てみるのも勉強になりますよ! 言わんとしていることが分かるかも。
guest

0

初期化処理、メイン処理、終了処理のうち、
終了処理ってのは、例えば非表示で表示していたExcelワークブックを忘れずに閉じて終了するなどのことでしょうか。
だとすると、Excelワークブックを最後に閉じるためにそのオブジェクトをグローバル変数で保持する必要が生じて、
それを初期化処理で宣言・確保するといった考え方でしょうか。
メイン処理の中で必要な変数は必ず初期化して、
ブランク文字列やゼロや何かのオブジェクトを設定しますよね。
処理を終了する前に、オブジェクト類は.Close.Exitなどで後片付けをしないと
非表示状態でExcelとかが残ってしまうこともありますし。

投稿2015/10/15 05:53

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問