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

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

hidetnkの回答

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

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

関連するQ&A

  • SubとFunctionの使い分け方。(Access VBA)

    Sub:実行するとそのまま処理が終わり、特に次の作業に影響しない。 Function:関数と同じように使い、そこでの戻り値をどこかに代入して利用する。 あるテキストにこの様に書いてありました。 この考え方だと、マクロをVBAに変換すると「モジュールオブジェクト」に出来るFunctionプロシージャは、Subの方が理解にしっくりくるのですど・・・ 例えば、「テーブルを開く」(マクロ)だと、ただテーブルを開いて処理を終了するだけなので、SubでVBAが出来るの方が納得するのですけど。 正直、今の認識では、本を読んでいても何となく分かったような気がするだけで、SubとFunctionの使い分けがイマイチ分かりません。 どなたか、SubとFunctionの使い分けの目安をお教えいただけないでしょうか?。 (Access VBA初心者)

  • Worksheet.functionに関して

    VBAでTanhやRoundといったExcelの関数を使いたい場合、 Worksheet.functionという記述を使うことで使用することが可能ですが、 これを使うデメリットはないのでしょうか?自分で関数を定義して使った方が良いということはないのでしょうか? 他の人が書いたVBAのプログラムを見たことがないので分かりませんが、 Worksheet.functionばかり使っていると処理速度が遅くなったりしそうな気がするのですが、そのようなことはないのでしょうか?

  • Excel VBAの Functionをワークシートから使用できないようにしたいのですが...

    Excel VBAについて質問です。 functionプロシージャを使っている時,一般のマクロからは呼び出せるが,ワークシート関数として使いたくないものがあります。 すなわち,「関数の挿入」ダイアログの「ユーザー定義」のところに不必要な(ワークシート関数として使う意図のないもの)を表示させたくないのですが,そのようなことは可能でしょうか。 今,できるだけsubプロシージャの形にするようにしたりしているのですが,うまい方法があればFunctionも使いたいと思っています。 良い方法があれば教えてください。

  • Functionプロシージャではなぜプロシージャ名=○○という文章が多いのか

    VBAを初めて使っています。 勉強してはいるのですが、混乱していて あまり理解できていません。 「Functionプロシージャとsubプロシージャの違いは、戻り値を返すか返さないか」という事までは知識としてわかったのですが、 ・・・サンプルプログラムをながめてみても、どう使えば良いのかまだわかりません。 大変愚問かと思われ申し訳ないのですが、Functionプロシージャの中で、 プロシージャ名=○○ というかたちがよく見られるのはなぜでしょうか。 Function abc abc="hello" というような。 多分これがわかればFunctionプロシージャの使い方が わかってくるのでは、と思っているのですが・・・。

  • Functionプロシージャの便利さがわかりません

    私はVBAコードを作る時は、もっぱらsubプロシージャーを使ってしまうのですが、 http://excelvba.pc-users.net/fol5/5_4.html を参考に、 Functionプロシージャとsubプロシージャの違いを確認してみたのですが、 Functionプロシージャの便利さがわかりません。 *********************************** Sub Test() SubプロシージャとFunctionプロシージャのテスト i = 1 Call Subプロシージャ(i) i = Functionプロシージャ(i) MsgBox "Functionプロシージャ結果:" + CStr(i) End Sub Sub Subプロシージャ(ByVal i As Integer) MsgBox "Subプロシージャ結果:" + CStr(i) End Sub Function Functionプロシージャ(ByVal i As Integer) As Integer i = i + 1 Functionプロシージャ = i End Function *********************************** Functionプロシージャは、 (ByVal i As Integer) As Integer のように、、二回もデータ型(Integer)の指定をしなくてはいけないのでしょうか? リンク先の説明には、 「SubプロシージャとFunctionプロシージャの違いは Subプロシージャが引数を受け取るのみに対して Functionプロシージャは引数を受け取り、 戻り値を返すという関数としての役割を果たすことができる点です。」 と記載されてますが、 それはSubプロシージャでも出来てますよね? サンプルコードにおいてのFunctionプロシージャの便利さを教えてください。

  • VBAのFunction内でのセル値書き換え

    Excel上でVBAを使ってある値を求めるユーザー定義関数を 自作しようとしています。 その関数の中でワークシートの中のセル値を書き換えようとしましたが そこでプログラムは停止してしまいます。 エラーメッセージなどは無く、VBAプログラムが終了します。 サブプロシージャの中でなら当然書き換えはできるのですが、 関数の中でセル値を書き換えることはできないのでしょうか? 環境はWinXP SP2, Office 2000です。 どなたか分かる方、教えていただけると幸いです。 よろしくお願いします。

  • EXCEL VBAでACCESSのデータを扱いたい(初心者です)

    EXCEL VBAを勉強している者です。VBAでコードを書いてACCESSのデータを抽出してEXCELでその抽出したデートを加工したい(すべてVBAでコードを書いて処理)のですが、よくわかりません。EXCEL VBAの書籍を数冊勉強したのでEXCELの中だけでデータを作ったり、加工したりは理解できているつもりです。ただ、今まで読んだ書籍には外部データベースに接続して、その後、処理をするといったことが書いてなかったので、まったく知識がありません。そこで、ACCESSへの接続の仕方、操作の仕方などについて、やさしく(私みたいな初心者でも理解できる)説明してあるサイトまたは書籍をご存知の方、お教えください。特に、今のところ、最初の接続のところがわからないので接続について詳しく説明してあるサイトなどお願いします。

  • functionを含んだプログラムを作成したいのですが、上手くいきません

    functionを含んだ計算をプロシージャで行い、返すプログラムを作りたいのですが上手くいきません。 具体的には ある式に定められた値を代入(inputではなくEXCEL上に指定済み)し、 その定数の横にそれぞれ出力されるプログラムです。 function 内でforを用いた式を作成し、メインプログラムに出力する段階で、『引数は省略できません』と表示され起動することがありません。 一体なぜでしょうか? プログラムが間違っているだけでしょうが、治せません。

  • Function

    Sub test1() Debug.Print 全角("aaa") End Sub Public Function 全角(mystr) mystr = StrConv(mystr, vbWide) End Function このVBAコードはどこがおかしいですか? 私の理想としては Public Function 全角(mystr) のmystrの中に半角の「aaa」が入り mystr = StrConv(mystr, vbWide) で全角の「aaa」になり その結果が Sub test1()に戻った時に Debug.Printに吐き出される予定だったのですが 何も表示されません。 関数(Function)を使うべきではないのでしょうか?

  • SubではなくFunctionで作られる理由

    access2007を使っています。 素朴な疑問なのですがマクロを変換した時はなぜ Subプロシージャーではなく、Functionなのでしょうか? 「クエリを開く」と言うマクロを、VBAに変換したところ ******************************************************* Function マクロ1() On Error GoTo マクロ1_Err DoCmd.OpenQuery "クエリ1", acViewNormal, acEdit マクロ1_Exit: Exit Function マクロ1_Err: MsgBox Error$ Resume マクロ1_Exit End Function ******************************************************* となりました。 戻り値や返り値はないものは、FunctionプロシージャーではなくSubプロシージャーで作るものと思っていたのですが なぜ上記のコードはFunctionなのでしょうか? Functionで作る理由を教えてください。 特に意味はないのでしょうか? ちなみにFunctionをSubに書き換えて実行したら問題なくクエリが開きました。