サーチ…
変数名
変数はデータを保持します。 データ型やスコープの後ではなく 、 名詞を使用して、使用されているものの名前を付けます。あなたの変数(例: thing1, thing2, thing3
)に番号を付けることを強いられたら、その代わりに適切なデータ構造(配列、 Collection
、 Dictionary
)を使うことを検討してください。
反復可能な値の集合を表す変数の名前 - 例えば、配列、 Collection
、 Dictionary
、またはセルのRange
は、複数でなければなりません。
いくつかの一般的なVBA命名規則は次のようになります。
プロシージャ・レベルの変数の場合 :
camelCase
Public Sub ExampleNaming(ByVal inputValue As Long, ByRef inputVariable As Long)
Dim procedureVariable As Long
Dim someOtherVariable As String
End Sub
モジュールレベルの変数の場合:
PascalCase
Public GlobalVariable As Long
Private ModuleVariable As String
定数の場合:
SHOUTY_SNAKE_CASE
は、定数と変数を区別するためによく使用されます。
Public Const GLOBAL_CONSTANT As String = "Project Version #1.000.000.001"
Private Const MODULE_CONSTANT As String = "Something relevant to this Module"
Public Sub SomeProcedure()
Const PROCEDURE_CONSTANT As Long = 10
End Sub
ただし、 PascalCase
名前はよりPascalCase
コードになり、IntelliSenseでは変数と定数に異なるアイコンが使用されるため、
ハンガリー記法
データ型またはスコープの後ではなく 、使用した後に名前を付けます。
「ハンガリー語の表記法は、変数の型がどのようなものであるかを簡単に確認できます。
プロシージャのようなコードを( 単なる)責任の原則に準拠させて書くならば、プロシージャの先頭にある変数の宣言を一瞥してはいけません。可能な限り最初の使用法に近い変数を宣言し、明示的な型で宣言すると、そのデータ型は常に明白になります。 VBEのCtrl + iショートカットを使用して、変数のタイプをツールチップに表示することもできます。
どのような変数が使用されるかは、データ型よりはるかに有益な情報です。 特に VBAなどの言語では、必要に応じて喜んで暗黙的に型を別の型に変換します。
次の例では、 iFile
とstrFile
を考慮します。
Function bReadFile(ByVal strFile As String, ByRef strData As String) As Boolean
Dim bRetVal As Boolean
Dim iFile As Integer
On Error GoTo CleanFail
iFile = FreeFile
Open strFile For Input As #iFile
Input #iFile, strData
bRetVal = True
CleanExit:
Close #iFile
bReadFile = bRetVal
Exit Function
CleanFail:
bRetVal = False
Resume CleanExit
End Function
比較する:
Function CanReadFile(ByVal path As String, ByRef outContent As String) As Boolean
On Error GoTo CleanFail
Dim handle As Integer
handle = FreeFile
Open path For Input As #handle
Input #handle, outContent
Dim result As Boolean
result = True
CleanExit:
Close #handle
CanReadFile = result
Exit Function
CleanFail:
result = False
Resume CleanExit
End Function
上の例では、 strData
ByRef
が渡されていますが、 明示的に渡されていることを確認できるだけの幸運なことのほかに、 strData
が関数によって実際に返されることはありません。
下の例は、それをoutContent
という名前にしoutContent
。このout
、変数は明らかに「アウト」のパラメータとしてそれを識別するために、この場合には、 のために使用されているものを理解しやすくするために:プレフィックスがためにハンガリアン記法が発明されたものです。
これは、パラメーターが参照によって明示的に渡された場合でも、IntelliSense自体がByRef
表示しないために便利です。
それは何につながる...
ハンガリー人は右に行った
ハンガリーの表記法はもともと可変型とは関係ありませんでした 。実際には、 右に行わハンガリアン記法は実際に有用です。この小さな例( ByVal
とAs Integer
を簡潔にするために削除)を考えてみましょう。
Public Sub Copy(iX1, iY1, iX2, iY2)
End Sub
比較する:
Public Sub Copy(srcColumn, srcRow, dstColumn, dstRow)
End Sub
src
とdst
はここではハンガリー表記の接頭辞で、パラメータ名やIntelliSenseから推測できない有用な情報を伝えます。
もちろん、適切な抽象化と実際の言葉を使って、大声で発音して意味を成すことができる、すべてを伝えるより良い方法があります - 人為的な例として:
Type Coordinate
RowIndex As Long
ColumnIndex As Long
End Type
Sub Copy(source As Coordinate, destination As Coordinate)
End Sub
プロシージャ名
手続きは何かをする 。 動詞を使って、彼らが何をしているのかを記してください。プロシージャの名前を正確に指定することが不可能な場合、プロシージャはあまりにも多くのことをしており、より小さく、より特殊なプロシージャに分割する必要があります。
いくつかの一般的なVBA命名規則は次のようになります。
すべての手順について:
PascalCase
Public Sub DoThing()
End Sub
Private Function ReturnSomeValue() As [DataType]
End Function
イベントハンドラプロシージャの場合:
ObjectName_EventName
Public Sub Workbook_Open()
End Sub
Public Sub Button1_Click()
End Sub
イベントハンドラは通常VBEによって自動的に命名されます。オブジェクトやハンドルされたイベントの名前を変更せずに名前を変更すると、コードが実行されコンパイルされますが、ハンドラプロシージャは孤立して実行されることはありません。
ブールメンバー
ブール関数を返すことを考えてみましょう:
Function bReadFile(ByVal strFile As String, ByRef strData As String) As Boolean
End Function
比較する:
Function CanReadFile(ByVal path As String, ByRef outContent As String) As Boolean
End Function
Can
プレフィックスは 、接頭辞b
と同じ目的を果たします。これは、関数の戻り値をBoolean
値で識別します。しかし、 Can
はb
より読むCan
ます:
If CanReadFile(path, content) Then
に比べ:
If bReadFile(strFile, strData) Then
ブール値を返すメンバ(関数やプロパティ)の前にCan
、 Is
、 Has
などの接頭辞を使用することを検討しCan
、値を追加する場合にのみ使用してください。これは、 現在のMicrosoftの命名規則に準拠しています 。