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
Dim
変数の宣言 。
Dim r As Range
Set
sets変数をオブジェクト参照に設定 。
Set r = Range("A1")
しかし、これはあなたが本当に求めていることではないと思います。
時々私は使用します:
Dim r as Range r = Range("A1")
これは機能しません。 Set
がないと、ランタイムエラーが表示されます #91Object variable or With block variable not set 。これは、mustがSet
を使用して変数値をオブジェクト参照に割り当てるためです。次に、上記のコードwillが機能します。
以下のコードはあなたが何をしているのかを示していると思いますreally型を宣言せず、代わりに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
がVariantとして宣言されています
`Dim r` ' TypeName(r) returns "Empty", which is the value for an uninitialized variant
r
は、セル "A1"を含むRange
に設定されます
Set r = Range("A1") ' TypeName(r) returns "Range"
r
は、Range("A1")
のdefaultプロパティのvalueに設定されます。
r = Range("A1") ' TypeName(r) returns "String"
この場合、Rangeのデフォルトプロパティは.Value
であるため、次の2行のコードは同等です。
r = Range("A1")
r = Range("A1").Value
デフォルトのオブジェクトプロパティの詳細については、 チップピアソンの「クラスのデフォルトメンバー」 を参照してください。
Set
の例に関しては:
私が使用する他の時間
Set r = Range("A1")
これは、r
がRange
またはVariant
オブジェクトであることを最初に宣言しないと機能しません... Dim
ステートメントを使用して-Option Explicit
を有効にしていない場合を除きます。常に。それ以外の場合は、宣言していない識別子を使用しており、それらはすべて暗黙的に Variants として宣言されています。
Dim:変数を定義しています(ここで、rはRange型の変数です)
設定:プロパティを設定しています(ここでは、rの値をRange( "A1")に設定します-これはタイプではなく、値です)。
オブジェクトでsetを使用する必要があります。rが単純型(たとえば、int、string)の場合、次のように記述します。
Dim r As Integer
r=5
Dim
は、単に値と型を宣言するだけです。
Set
は、変数に値を割り当てます。
変数がオブジェクトとして定義されている場合myfldr As Folderの場合、キーワード「Set」を使用して値が割り当てられます。
Dim
はDimensionの略で、VBAおよびVB6でローカル変数を宣言するために使用されます。
一方、設定は、変数宣言とは関係ありません。 Set
キーワードは、オブジェクト変数を新しいオブジェクトに割り当てするために使用されます。
それがあなたのために違いを明らかにすることを願っています。
SETステートメントのVBAヘルプによると、object.soへの参照を設定します。プロパティを変更すると、実際のオブジェクトも変更されます。
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`
実際、すべての変数は同じです!