サーチ…


変数名

変数はデータを保持します。 データ型やスコープのではなく名詞を使用して、使用されているものの名​​前を付けます。あなたの変数(例: thing1, thing2, thing3 )に番号を付けることを強いられたら、その代わりに適切なデータ構造(配列、 CollectionDictionary )を使うことを検討してください。

反復可能な値の集合を表す変数の名前 - 例えば、配列、 CollectionDictionary 、またはセルの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では変数と定数に異なるアイコンが使用されるため、

一定のFooと可変のバーで異なるアイコンを使用するIntelliSense


ハンガリー記法

データ型またはスコープのではなく 、使用した後に名前を付けます。

「ハンガリー語の表記法は、変数の型がどのようなものであるかを簡単に確認できます。

プロシージャのようなコードを( 単なる)責任の原則に準拠させて書くならば、プロシージャの先頭にある変数の宣言を一瞥してはいけません。可能な限り最初の使用法に近い変数を宣言し、明示的な型で宣言すると、そのデータ型は常に明白になります。 VBEのCtrl + iショートカットを使用して、変数のタイプをツールチップに表示することもできます。

どのような変数が使用されるかは、データ型よりはるかに有益な情報です。 特に VBAなどの言語では、必要に応じて喜んで暗黙的に型を別の型に変換します。

次の例では、 iFilestrFileを考慮します。

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表示しないために便利です。

実際の署名が参照( "ByRef")によって明示的に渡されたoutCommentを指定する場合、IntelliSenseは "CanReadFile(ByVal path as String、String as outComment as String)As Boolean"

それは何につながる...

ハンガリー人は右に行った

ハンガリーの表記法はもともと可変型とは関係ありませんでした 。実際には、 右に行わハンガリアン記法は実際に有用です。この小さな例( ByValAs Integerを簡潔にするために削除)を考えてみましょう。

Public Sub Copy(iX1, iY1, iX2, iY2)
End Sub

比較する:

Public Sub Copy(srcColumn, srcRow, dstColumn, dstRow)
End Sub

srcdstはここではハンガリー表記の接頭辞で、パラメータ名や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値で識別します。しかし、 Canbより読むCanます:

If CanReadFile(path, content) Then

に比べ:

If bReadFile(strFile, strData) Then

ブール値を返すメンバ(関数やプロパティ)の前にCanIsHasなどの接頭辞を使用することを検討しCan 、値を追加する場合にのみ使用してください。これは、 現在のMicrosoftの命名規則に準拠しています



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow