VBAの初心者としてご容赦ください。
時々使う
Dim r as Range
r = Range("A1")
他の時に私は使用します
Set r = Range("A1")
違いはなんですか?そして、私はいつ何を使うべきですか?
回答:
set
オブジェクト参照を参照しない限り、使用する理由はありません。そのコンテキストでのみ使用することをお勧めします。他のすべての単純なデータ型の場合は、代入演算子を使用するだけです。dim
ただし、すべての変数を(次元)することをお勧めします。
単純なデータ型の例としては以下のようになりinteger
、long
、boolean
、string
。これらは単なるデータ型であり、独自のメソッドとプロパティはありません。
Dim i as Integer
i = 5
Dim myWord as String
myWord = "Whatever I want"
例は、object
あろうRange
、Worksheet
またはWorkbook
。これらには独自のメソッドとプロパティがあります。
Dim myRange as Range
Set myRange = Sheet1.Range("A1")
なしSet
で最後の行を使用しようとすると、VBはエラーをスローします。object
宣言ができたので、そのプロパティとメソッドにアクセスできます。
myString = myRange.Value
Set
せずに使用しても大丈夫Dim
ですか?
Dim
変数を宣言します。
Dim r As Range
Set
変数をオブジェクト参照に設定します。
Set r = Range("A1")
しかし、これはあなたが本当に求めていることではないと思います。
時々私は使用します:
Dim r as Range r = Range("A1")
これは決して機能しません。これがないSet
と、ランタイムエラー#91オブジェクト変数またはブロック変数が設定されていません。これは、を使用して変数値をオブジェクト参照に割り当てる必要があるためですSet
。その後、上記のコードが機能します。
以下のコードは、あなたが本当に求めていることを示していると思います。型を宣言せr
ず、Variant
代わりに型にしようとしましょう。
Public Sub test()
Dim r
debug.print TypeName(r)
Set r = Range("A1")
debug.print TypeName(r)
r = Range("A1")
debug.print TypeName(r)
End Sub
それでは、ここで何が起こっているのかを分析してみましょう。
r
バリアントとして宣言されています
`Dim r` ' TypeName(r) returns "Empty", which is the value for an uninitialized variant
r
Range
含まれているセル「A1」に設定されます
Set r = Range("A1") ' TypeName(r) returns "Range"
r
設定された値のデフォルトプロパティのRange("A1")
。
r = Range("A1") ' TypeName(r) returns "String"
この場合、Rangeのデフォルトプロパティは.Value
であるため、次の2行のコードは同等です。
r = Range("A1")
r = Range("A1").Value
デフォルトのオブジェクトプロパティの詳細については、ChipPearsonの「クラスのデフォルトメンバー」を参照してください。
あなたのSet
例として:
他の時に私は使用します
Set r = Range("A1")
これr
は、最初にそれがRange
またはVariant
オブジェクトであることを宣言しDim
ないと機能しません...ステートメントを使用して-Option Explicit
有効にしていない限り、そうする必要があります。常に。それ以外の場合は、宣言していない識別子を使用しており、それらはすべて暗黙的にバリアントとして宣言されてい ます。
Dim:変数を定義しています(ここで:rはRange型の変数です)
設定:プロパティを設定します(ここでは、rの値をRange( "A1")に設定します。これはタイプではなく値です)。
オブジェクトでsetを使用する必要があります。rが単純な型(int、stringなど)の場合は、次のように記述します。
Dim r As Integer
r=5
Dim
値とタイプを宣言するだけです。
Set
変数に値を割り当てます。
変数がオブジェクトとして定義されている場合(Dim myfldr As Folderなど)、キーワード「Set」を使用して値が割り当てられます。
Dim
はDimensionの略で、ローカル変数を宣言するためにVBAおよびVB6で使用されます。
一方、Setは、変数宣言とは何の関係もありません。Set
キーワードがするために使用されます割り当てる新しいオブジェクトにオブジェクト変数を。
それがあなたの違いを明らかにすることを願っています。
SETステートメントのVBAヘルプによると、オブジェクトへの参照が設定されます。したがって、プロパティを変更すると、実際のオブジェクトも変更されます。
Dim newObj as Object
Set var1=Object1(same type as Object)
Set var2=Object1(same type as Object)
Set var3=Object1(same type as Object)
Set var4=Object1(same type as Object)
Var1.property1=NewPropertyValue
他のVarsプロパティも変更されるため、次のようになります。
Var1.property1=Var2.property1=Var3.property1=Var4.property1=Object1.Property1=NewpropertyValue`
実際にはすべての変数は同じです!