|
こんにちは。
>変数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
自作クラスで既定のプロパティを値、配列、オブジェクトにして試してみると
もっと考察できるかもしれません。
|
|