LoginSignup
1
2

More than 5 years have passed since last update.

スピル時代のExcel VBA

Last updated at Posted at 2018-10-28

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

ではでは

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2