ここから本文です

Excel VBA で多次元配列から複数の要素を抽出する方法についての質問

tkdkuさん

2008/1/2001:03:22

Excel VBA で多次元配列から複数の要素を抽出する方法についての質問

VBA をあまり利用していないので、初心者的な質問をして大変恐縮なのですが、
Excel (Excel 2002 を使用しています) の VBA について下記の質問があります。

たとえば、3 次元配列 A(100, 100, 100) があって、A の第一番目の要素に 7 を指定すると、
7 番目の 2 次元配列を返すような (A (7, , ) ) ことをしたいのですが、やはり値をすべてコピーする方法しかないのでしょうか。
もっとエレガントな方法があったら教えていただけないでしょうか。
宜しくお願いします。

閲覧数:
24,082
回答数:
2

違反報告

ベストアンサーに選ばれた回答

slamtiltさん

2008/1/2011:22:20

Variant型の変数には配列を代入することもできるので、多次元配列ではなくジャグ配列(配列の配列)を扱えば、質問者さんが望むのと同様なことができます。

Sub s()

Dim d(100, 100) As String
Dim v(100) As Variant, w As Variant
Dim i As Integer, j As Integer, k As Integer

For i = 0 To 100
For j = 0 To 100
For k = 0 To 100
d(j, k) = CStr(i) & ", " & j & ", " & k
Next
Next
v(i) = d
Next
w = v(7) 'wには、String型で大きさ(0 to 100, 0 to 100)の2次元配列が代入される。
MsgBox w(10, 29) '"7, 10, 29"が表示される。
MsgBox v(98)(65, 0) '"98, 65, 0"が表示される。

End Sub



変数vから要素を取り出すときに、ジャグ配列と多次元配列の書式が混ざっていて見た目が若干良くないので、全部ジャグ配列にしてもいいです。

Sub s1()

Dim d(100) As String
Dim v(100) As Variant, w As Variant, u(100) As Variant
Dim i As Integer, j As Integer, k As Integer

For i = 0 To 100
For j = 0 To 100
For k = 0 To 100
d(k) = CStr(i) & ", " & j & ", " & k
Next
u(j) = d
Next
v(i) = u
Next
w = v(7) 'wには、Variant型で大きさ(0 to 100)の1次元配列が代入される。wの各要素は、String型で大きさ(0 to 100)の1次元配列となっている。
MsgBox w(10)(29) '"7, 10, 29"が表示される。
w = v(98)(65) 'wには、String型で大きさ(0 to 100)の1次元配列が代入される。
MsgBox w(0) '"98, 65, 0"が表示される。
MsgBox v(0)(100)(50) '"0, 100, 50"が表示される。

End Sub

質問した人からのコメント

2008/1/24 00:22:16

素早いご回答ありがとうございます。ジャグ配列を使えば解決できるんですね。
勉強になりました。

ベストアンサー以外の回答

1〜1件/1件中

fuyukitaprilさん

2008/1/2006:48:45

ユーザ定義型(構造体)を使えば、配列としても扱いやすいと思います。


プロシジャ内ではなく、モジュールに定義で

Type KouzoutaiDesuyo

Hailets() As Long

End Type

これをプロシジャ内で

Dim KozoTai(100) As KouzoutaiDesuyo
ReDim KozoTai.Hailets(100,100)

このように宣言すれば

KozoTai(7).Hailets

で、構造体変数の7番目のメンバ(配列)をまとめて扱えます。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。