###共通プログラム設計 とは何でしょうか
過去の質問にてコードを使いまわしたいときにどうメンテナンスをしたらいいのか
等の質問をしていたのですが「コード設計の見直し」が必要だと言われてしまいました。
今まで私が新しいプロシージャなどを作るときは
0. 何がしたいのか
0. 何が必要か
0. 結果はどう返すか
あたりを考えて 1. を基に命名して 2. を基に引数を決めて 3. を基にFunction
にするのかSub
にするのか
決めて処理の中身を書き始めるという感じなのですが こういった作業の事でしょうか?
コードの設計と言われても具体的に何をしたらよいのかわかりません。
ご教授お願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/23 06:30
2018/07/23 06:33
2018/07/23 06:35
2018/07/23 06:39
2018/07/23 06:40
2018/07/23 06:51 編集
2018/07/23 07:51
2018/07/23 08:39
回答2件
0
ベストアンサー
再利用可能な関数を作るにあたって、
段階は大きく2つ分かれると思います
1.どのツールでも汎用的に使うもの
2.そのツール内で共通で使うもの
1の例で簡単なものを1つ
↓はセルの背景色をクリアする為の関数です。
たった1行ですが、どうするんだっけ?と3回目に調べた時に作りました。
VBA
1Public Function fRange_Clear_Interior(Range As Range) 2 3 Range.Interior.Pattern = xlNone 4 5End Function
まずは、どのツールでも使える汎用的な関数を作っていくといいのでは?
作っていく内に、どういう単位で、どういう程度の機能を載せるのか、
という事が感覚的にわかってくると思います。
言葉でいえば、一言で説明できるもの(概念的なもの)、
というのが1つの目安になると思います。
(上記でいう「背景色のクリア」など)
コード行数的には、1画面に収まる程度、
というのが目安になると聞いたこともあります。
(書き方にもよるので、ほんとに参考程度だと思います)
あと、オプション要素が増えすぎた?、と思った時には、
本当に必要な引数なのか再考し、
切り分けた方が良い事もあります。
で、汎用的ではないけど、このツール(ソフト)では何回も
同じような事をしてるな、と思ったら共通関数化していきましょう。
感覚的には2回同じコードを書いたら、共通化を考えています。
そして、だいたいの場合、共通化していってます。
参考までに、もう1つ汎用的な関数を。
これは MsgBox を個人的に使いやすく改造したものです。
これ用のモジュール(M_MsgBox)に、この関数だけ記載し、
全ツールでモジュールごと放り込んで使いまわしてます。
VBA
1Option Explicit 2Option Private Module 3 4Public Const Msg_Title As String = "System" 'ツール毎に調整 5 6Public Enum E_MsgBox_Icon 7 vbCritical = VbMsgBoxStyle.vbCritical 8 vbExclamation = VbMsgBoxStyle.vbExclamation 9 vbInformation = VbMsgBoxStyle.vbInformation 10 vbQuestion = VbMsgBoxStyle.vbQuestion 11End Enum 12 13Public Enum E_MsgBox_Button 14 vbOKOnly = VbMsgBoxStyle.vbOKOnly 15 vbOKCancel = VbMsgBoxStyle.vbOKCancel 16' vbYesNoCancel = VbMsgBoxStyle.vbYesNoCancel '出番が無いのでコメントアウト 17' vbYesNo = VbMsgBoxStyle.vbYesNo '出番が無いのでコメントアウト 18End Enum 19 20Public Enum E_MsgBox_Result 21 vbOK = VbMsgBoxResult.vbOK 22' vbCancel = VbMsgBoxResult.vbCancel '出番が無いのでコメントアウト 23' vbYes = VbMsgBoxResult.vbYes '出番が無いのでコメントアウト 24' vbNo = VbMsgBoxResult.vbNos '出番が無いのでコメントアウト 25End Enum 26 27Public Enum E_MsgBox_Default 28 vbButton1 = VbMsgBoxStyle.vbDefaultButton1 29 vbButton2 = VbMsgBoxStyle.vbDefaultButton2 30' vbButton3 = VbMsgBoxStyle.vbDefaultButton3 '出番が無いのでコメントアウト 31' vbButton4 = VbMsgBoxStyle.vbDefaultButton4 '出番が無いのでコメントアウト 32End Enum 33 34Public Function Msg_Show(Message As String, _ 35 Optional Icon As E_MsgBox_Icon = E_MsgBox_Icon.vbCritical, _ 36 Optional Button As E_MsgBox_Button = E_MsgBox_Button.vbOKOnly, _ 37 Optional Default As E_MsgBox_Default = E_MsgBox_Default.vbButton1, _ 38 Optional Title As String = Msg_Title) As E_MsgBox_Result 39 40 '今の画面停止設定を取得 41 Dim ScreenUpdate As Boolean 42 ScreenUpdate = Application.ScreenUpdating 43 44 '画面停止のスイッチ 45 If ScreenUpdate = False Then Application.ScreenUpdating = True 46 47 '質問時、ボタンをOKキャンセルに自動変更 48 Dim Btn As E_MsgBox_Button 49 Btn = Button 50 If Icon = vbQuestion Then 51 Btn = vbOKCancel 52 End If 53 54 'メッセージ表示 55 Msg_Show = MsgBox(Message, Icon + Btn + Default + vbSystemModal, Title) 56 57 '画面停止のスイッチ 58 If ScreenUpdate = False Then Application.ScreenUpdating = False 59 60End Function
投稿2018/07/24 01:23
総合スコア1175
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/24 01:55
2018/07/24 03:40
2018/07/26 00:05
2018/07/26 03:37
2018/07/26 04:53
0
共通プログラム設計 とは何でしょうか
わかりません。
が、コメント欄のやりとりについては、MSDNに似たような内容あったので、リンクします。
複雑なプロシージャは、1 つの作業を実行する小さなプロシージャに分割します。
プロシージャには、明確な関連のあるコードのみを含めます。
新しいプロシージャを記述する際は、1 つの作業を実行するようにデザインします。
名前付きアプリケーション オブジェクトを参照することは避けてください。
デザイン=設計です。
上記のようなことが、コメント欄や回答などで書かれていたかと思います。
あと、MSDNのリンクから別記事にありますが、
再利用可能なコードとは、特定の "サービス" を実行する目的で、内容を変更せずにさまざまなアプリケーションで使用できるコードのことです。
経験積めば意識しなくても自然にできるようになると思いますが、
現時点で思ったのは、再利用をするための設計を覚える?勉強するよりも、
現在の実装がなぜ再利用できないのか?(変更が必要になるのか?)を意識してみては、どうでしょうか。
一般的なプログラマであれば以下をコードの再利用とは言わないですが、再利用ってコピペじゃないですよね?
投稿2018/07/23 07:28
編集2018/07/23 07:35総合スコア4820
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/23 08:37
2018/07/24 01:00
2018/07/24 01:55
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。