和風スパゲティのレシピ

日本語でコーディングするExcelVBA

0,1始まりでない配列(Array)をセルに出力する

たまに「あれ?これってやってよかったんだっけ?」となってしまう、
ちょっと特殊な処理の結果を書き残しておきます。

例えば「インデックスが2~5の配列」を全然違う番地のセル範囲に吐き出してみます。

◇ ソースコード

Dim Arr(2 To 5)
Arr(2) = 1
Arr(3) = 2
Arr(4) = 3
Arr(5) = 4

Range("C2").Resize(1, 4).Value = Arr
Range("A3").Resize(4, 1).Value = WorksheetFunction.Transpose(Arr)

 
◇ 実行結果
1次元配列をセルに出力


問題なく動いていますね。


続いて同じように二次元配列を吐き出してみます。

◇ ソースコード

Dim Arr(2 To 5, -2 To 1)
Arr(2, -2) = 1
Arr(3, -1) = 2
Arr(4, 0) = 3
Arr(5, 1) = 4

Range("C3").Resize(4, 4).Value = Arr

 
◇ 実行結果
2次元配列をセルに出力する

こちらも問題なく動いています。

-2~1という無茶な定義でも全く問題ありません。


ということで、インデックスが0や1で始まらない配列であっても、
行数・列数が一致していれば通常と同じコードでセルに出力ができます。


よくよく考えれば、

Dim Arr(0 To 3, 0 To 3)

この4×4の配列を

Range("J10").Resize(4, 4) = Arr

このコードで出力できているわけなので、
当然と言えば当然かもしれません。


「いや当然でしょ。いまさら何を言ってるの?」

と思った方もいらっしゃるとは思いますが、
当然なことほどたまにわからなくなる気もしますので、
分からなくなった(私のような)方向けに書き残して置きました。


何かのお役に立てば幸いです(´∀`)