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

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

ただいまの
回答率

87.79%

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

受付中

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 6,729

score 24

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

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

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

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

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


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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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)に表されていると、その処理が何をしたいかイメージしやすいですね


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

がんばってください

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-2

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/10/16 09:28

    追記です^^

    こういうことですか?と確認するのも必要だと思います。
    指導者の方が言わんとしていることが、ちゃんと伝わっているかが重要だとおもいます。
    自己解釈のまま進めるのは、場合によってはキケンです。
    うやむやなままでなくきちんと確認することは、仕事をしていく上でかなり重要です。
    (自分もコレでかなり悩んだ時期があります。。。)

    もし、指導者の方が以前書かれたソースがあるのなら、
    見てみるのも勉強になりますよ!
    言わんとしていることが分かるかも。

    キャンセル

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

  • ただいまの回答率 87.79%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る