見やすい モジュール,プロシージャ の書き方
今まで人に自分のコードを見てもらったことが無かったので
書き方がその時の気分によって変わっていました。
見やすくするために自分なりに条件を決めてみました。
悪いところ等の指摘をお願い致します。
決めてみた条件
-
変数の宣言を強制
Option Explicit
を入れ一行空ける -
先ず有れば条件付きコンパイルを書く
-
「
Private
よりもPublic
の方が上」の様にスコープが広いものほど上に書く -
定数より変数を上に書く
-
宣言は同じ型が隣り合うように、またカウンタ変数など役割が同じものは隣り合うようにする。
-
宣言の後は一行空ける
-
プロシージャの前後は3行空ける
-
プロシージャ内の最初の行に処理の簡易説明、その次に 返値と引数の補足説明
-
宣言は インデントは1
-
処理は インデントは2
-
ループ等の始まりと終わりがセットになっているものは その中に書く処理はインデントを一つ増やす
-
但し配列処理などの多重ループはあえてインデントをそろえる
-
処理のグループはインデント数が同じ文章と隣り合う場合は一行空ける
条件に沿って過去に書いたコードを手直ししてみました。
VBA
1Option Explicit 2 3'配布する時には以下のフラグをFalseにする 4#Const Coding = True 5#If Coding Then 6 Private FSO As FileSystemObject 7 Private TextStream_ As TextStream 8#Else 9 Private FSO As Object 10 Private TextStream_ As Object 11#End If 12#If VBA7 And Win64 Then '64ビット版 13 Private Declare PtrSafe Function QueryPerformanceFrequency Lib "kernel32" (frequency As Double) As Long 14 Private Declare PtrSafe Function QueryPerformanceCounter Lib "kernel32" (procTime As Double) As Long 15#Else '32ビット版 16 private Declare Function QueryPerformanceFrequency Lib "kernel32" (frequency As Double) As Long 17 private Declare Function QueryPerformanceCounter Lib "kernel32" (procTime As Double) As Long 18#End If 19 20Private PNo As Long 21Private Indent As Long 22Private StartTime As Double 23Private ErrorFlag As Boolean 24Private FIlename As String 25Private Const IndentWide As Long = 2 26 27 28 29Function Redims(ByVal Ar As Variant, Optional ByVal Vertical As Long = -1, Optional ByVal Horizontal As Long = -1) As Variant 30'二次元配列のリサイズを行う 31'返値:二次元配列 32' Base は 0 33'引数1: Ar = 二次元配列 34' Base は 0 or 1 35'引数2: Vertical = 縦の要素数 36' Base 0基準 37'引数3: Horizontal = 縦の要素数 38' Base 0基準 39 40 Dim min As Long 41 Dim VC As Long 42 Dim HC As Long 43 Dim VCF As Boolean 44 Dim X As Long 45 Dim Y As Long 46 Dim Tray As Variant 47 48On Error GoTo Err 49 '元の配列サイズ 50 min = LBound(Ar) 51 VC = UBound(Ar) 52 HC = UBound(Ar, 2) 53 54 '変更後の配列サイズが指定されていなければ保持 55 If Horizontal = -1 Then 56 Horizontal = HC - min 57 End If 58 If Vertical = -1 Then 59 Vertical = VC - min 60 End If 61 62 '配列の移し替え 63 ReDim Tray(Vertical, Horizontal) 64 Do While (Y <= Vertical And Y + min <= VC) 65 Do While (X <= Horizontal And X + min <= HC) 66 Tray(Y, X) = Ar(Y + min, X + min) 67 X = X + 1 68 Loop 69 X = 0 70 Y = Y + 1 71 Loop 72 73 '返値の指定 74 Redims = Tray 75Err: 76End Function 77 78 79 80Function Extract(ByVal Ar As Variant, ByVal Index As Long, Optional ByVal Vertical As Boolean) As Variant 81'二次元配列から任意の一行(列)を一次元配列で抜き出す 82'返値:一次元配列 83' Base は 0 84'引数1: Ar = 二次元配列 85' Base は 0 or 1 86'引数2: Index = 抜き出す行又は列 87' Ar の Base 基準 88'引数3: Vertical = 抜き出す方向 89' True:縦方向 90' False:横方向 91 92 Dim Ans As Variant 93 Dim Str As String 94 95 With WorksheetFunction 96 '列を書き出す場合は配列の縦横を反転 97 If Vertical Then 98 Ar = .Transpose(Ar) 99 End If 100 101 '指定された行をタブ区切りの文字列として格納 102 Str = Join(.Index(Ar, Index, 0), vbTab) 103 End With 104 105 'タブ区切りの文字列を一次配列に変換 106 Ans = Split(Str, vbTab) 107 108 '返値の指定 109 Extract = Ans 110End Function
具体的な処理の内容は置いておいて
見やすさ はどうでしょうか?
ご教授をお願い致します。
蛇足 見やすいコードが書きたい
最近 作る内容が複雑になってきて過去に作ったコードを再利用出来る様に
したいと思い始めました。
現状 コードがぐちゃぐちゃで探すよりも書き直した方が早いという感じで
再利用が出来ません。
書籍を買って読んだりしていますが
知識が増える度に選択肢の多さに迷い
手が止まります。
最終目標は判断基準の確立と
コードの使いまわしが出来るようにすることです。
宜しくお願い致します。
回答4件
あなたの回答
tips
プレビュー