| 
    
     |  | こんにちは。 
 >変数myV の型を Variant で行くか、Rangeで行くかでも
 >挙動が変わってきますね
 
 展開によっては、プロパティは、付けておくのがよい という例で
 このVariant型の例を投稿するつもりでした。
 
 Variant型なんですから、どんな型でも代入できることから、
 
 > Dim myV As Variant
 > Set myV = Range("B4:G4")
 > myV = 123      '
 msgbox typename(myv)
 
 で確認すれば Integer と表示されるので、もはや
 Range("B4:G4")とは、関係がないからですよね!!
 
 
 >---------------------------------------------------sample1
 >Sub sample1()
 > Dim MyRange As Range
 > Set MyRange = Range("B4:G4")
 > MyRange.Value = Split("あ い う え お か") '初期化
 >
 > Dim myV As Variant
 > Set myV = MyRange
 > myV.Value = 123   '[B4:G4]に123が代入される
 > MyRange = myV    '◆MyRangeには Emptyが代入される
 >End Sub
 
 
 >このときは
 >> Set myV = MyRange
 >でmyVに Range型 がセットされ、なおかつ
 >> myV.Value = 123   '[B4:G4]に123が代入される
 >で 変数myV をセットしたRangeオブジェクトとして使っているので
 >値(123) が myV.Valueにセットされたのでしょうか?
 そうだと思います。
 
 
 >それで
 >> MyRange = myV    '◆MyRangeには Emptyが代入される
 >の行で MyRange.Valueが空白になるのは、
 >「左辺は配列の値(Value)を要求しているのに右辺はRangeオブジェクトで
 >配列では無いため、無効なデータとしてEmptyが代入される仕様」
 >によるものでしょうか?
 たぶん、オブジェクトが渡されると、左辺のValueでは、
 右辺のオブジェクトの既定のプロパティまでチェックするんです。
 で、既定のプロパティである.Valueが配列だと、Emptyを返します。
 単体の値だと正常に値を設定します。
 
 Sub sample2()
 Dim MyRange As Range
 Set MyRange = Range("B4:g4")
 Dim myV As Variant
 Set myV = Range("a1")
 myV.Value = 123
 MsgBox "ok"
 MyRange = myV
 End Sub
 
 参考に以下の二つのプロシジャーも実行してみてください。
 前回投稿のリンク先でも例にあげていました。
 
 Sub sample3()
 Dim MyRange As Range
 Set MyRange = Range("B4:g4")
 Dim myV As Variant
 Set myV = Range("a1,c1:f1")
 myV.Value = 123
 MsgBox "ok"
 MyRange = myV
 End Sub
 Sub sample4()
 Dim MyRange As Range
 Set MyRange = Range("B4:g4")
 Dim myV As Variant
 Set myV = Range("c1:f1,a1")
 myV.Value = 123
 MsgBox "ok"
 MyRange = myV
 End Sub
 
 
 自作クラスで既定のプロパティを値、配列、オブジェクトにして試してみると
 もっと考察できるかもしれません。
 
 |  |