• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで一つのファンクションの中に全部コードを書いてしまいます )

VBAで一つのファンクションに全てのコードを書く方法とは?

このQ&Aのポイント
  • VBAでプログラムを書いている際に、一つのファンクションに全てのコードを書いてしまう場合、各機能ごとに処理を分ける方法があります。
  • 一つの関数に全てのコードを書くと、可読性や保守性が低くなります。それぞれの処理を個別のfunctionやsubroutineとして作成することで、コードの機能ごとに分けることができます。
  • 各機能ごとにfunctionやsubroutineを作成することで、プログラムの再利用性も高まります。また、デバッグやエラー処理も容易になります。

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.3

 コツというほどのものではありませんが。 ・コードに名前をつけよ。  と言っても、「この行からこの行はクマさん!」という風にニックネームをつける訳ではありません。  VBAではなくってVB6のフォームに関するサンプルプログラムを以下に掲載します。 Public Function CenterForm(ByRef f As Form) As Boolean  f.Left = (Screen.Width - f.Width) / 2  f.Top = (Screen.Height - f.Height) / 2  CenterForm = True End Function  これはフォーム(Window)を画面中央に配置するプロシージャーです。さて、このサンプルは(リターンコードの設定を除いて)2行だけのルーチンです。全フォームにこいつを呼び出すコードを記述しなければならないのなら、たった2行なんだから全フォームにこのコードを直接埋め込めば良いジャンという気になるかも知れませんが、このたった2行だけのコードはルーチンとして切り出す必然性があるという事です。  このコードを書いている時、書いている人(プログラマーの人)は、「フォームの左端の位置に画面の幅からフォームの幅を引いたモノを2で割った値を設定した後、フォームの上端の位置に画面の高さからフォームの高さを引いたモノを2で割った値を設定したい(物理的な処理)」のではなく、「フォームを画面の中央に配置したい(論理的な処理)」のです。なので、この2行だけのルーチンには「CenterForm」という、フォームが中央に来るっぽい名前がつけられました。  この例のように、コードブロックに対して論理的な名前をつけてみる訓練をすると、だんだんコードブロックの切り出し方が頭に浮かぶようになりますよ。これは、オブジェクト指向でも構造化手法でも変わりなく通用するテクニックです。これは逆を言うと、一言で説明できないブロックは分割する必要はないという事になります。無理やり切り出すと後で「なんでこんなルーチンがあるんだ?」という事になりかねません。あくまで、処理に名前をつける事ができ、そうすればその名前がそのままプロシージャー名になるのでプロシージャー名をつけるのに悩まないって事ですね。これも逆に言うとコードブロックに対してプロシージャー名のつけ方に悩んだらそこは切り出し場所では無いのだと言えます。 ・コメント(日本語による説明)だけでプログラムを書いてみる。  まぁ、これは本当は紙の上にフローチャートを描くなどの作業なんですけれども、ざっくりとしたくくり(最終的に数行~十数行のコードになりそうな単位)で、 Public Function Hoge() As Boolean  ' DBに接続する  ' If もしダメなら Then   ' エラー表示して終了  ' End If  ' ○○テーブルから△△の一覧を取得する  ' If □□を全部足し合わせたもの>100なら Then   ' 右側に合計を表示して終了  ' Else   ' 一覧を表示して収まりきらないものは切り捨てる  ' End If End Function  この例は論理的な説明と物理的な説明が統一されていませんが意図的なものです。ここで、論理的な説明になったものは「説明がざっくりしすぎ」か、そうでなければプロシージャーとして切り出せる可能性があるという事になります。最初の例CenterFormをコメントで説明つけると「画面の幅からフォームの幅を引いて・・・・」などのようになりますが、プロシージャーの中を説明するとそれは大抵物理的な説明になります。  以上のように論理的な説明になった部分をよそに切り出せないか検討して、切り出した場合はさらにその中でもう少し細かく説明をつけていくと、論理→切り出し、物理→そのままという単位でブレークダウンしていくとまずプログラムの論理的な骨格が出来上がります。後はコメントの下にプログラムをがりがり書いていけばよろしい。それ(そのコメントたち)が仕様書だ。う~んアジャイル。  と言ったところですが、何か得るものがあれば幸いです。

その他の回答 (2)

  • hidetnk
  • ベストアンサー率66% (2/3)
回答No.2

まずは,なぜ機能で分割するのか?を考えてみてください。 ・コードの可読性 ・共通部分が分離できる ことを期待するからであって, 「分割しないといけないから分割する」のではありません。 VBAのレベルでしたら,開発は基本1人で,小規模となるのがほとんどです。 ですので,「一つのファンクションの中に全部コードを書く」のもアリです。 それを踏まえて「各機能ごとにプログラムを作りたい」とのことでしたら, コードを記述する前に,簡単でいいので機能を書き出してみてください。 仕様書まではいりません。日本語で結構です。 このとき大切なのは,大きい機能をある程度まで小さい機能に分けること。 すると (A)「共通でつかえそうだ」 (B)「機能によって大きさが違うからそろえていこう」 という点が見つかってきます。 いきなり分割を意識するのでなく, (A)に注目して,共通部を部品化してはどうですか? 仕様を検討してからコード作成を行うというのが,コツだと思います。 当然開発効率も違ってきます。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

「構造化プログラミング」をキーワードに解説サイトや参考書を探してみましょう。

関連するQ&A