ReDimで初期化
ReDimを使った簡単な関数を定義します。
(A1) =A()
Function A(Optional S = "")
ReDim S(1 To 10, 1 To 10)
A = S
End Function
結果は、スピル可能の場合10x10の要素が0で初期化された配列が表示される筈です。
しかし、期待は要素が空の10x10の配列でした。
ReDim S(1 To 10, 1 To 10) As String とすると、欲しい結果は得られるのですが、
S(2,2) = 1 とすると、どう見てもStringに変換されています。
配列の要素は、Variantとして振舞って欲しかったのです。
本当はこうあって欲しい。
Excel のスピルをRangeで編集では、配列の初期化に、苦労しています。
初期化が0でなければ、こう書きたかったのです。配列が指定されていないと0で始まるのも気に入りません。
Rangeと配列の相互乗り入れをするならば、添え字が1から始まるようにすべきです。
あと、Splitを使うと強制的に添え字0始まりです。
Function TINIT(R, Optional T = "", Optional M = 0, Optional N = 0, Optional S = "")
If T = "" Then
S = R
Else
M = IFZS(M, R.Rows.Count)
Dim TA: TA = Split(TRIM_(T), ",")
N = UBound(TA) - LBound(TA) + 1
ReDim S(1 To M, 1 To N)
Dim J: For J = 1 To N
S(1, J) = TA(J - 1)
Next J
End If
TINIT = S
End Function
ではでは