• ベストアンサー

3次元配列の記述

VB6.0を使っています。 2次元配列は以下の様になりますが、3次元配列はどう記述すればいいのでしょうか? Dim phrase(1) As Variant phrase(0) = Array("0-0", "0-1", "0-2") phrase(1) = Array("1-0", "1-1", "1-2")

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

#3です。その後やって見たところ 後半は Sub test03() Dim d As Variant d = Array(Array(Array("0-0", "0-1", "0-2"), Array("1-0", "1-1", "1-2")), Array(Array("0-0", "0-1", "0-2"), Array("1-0", "1-1", "1-2"))) For k = 0 To 2 For j = 0 To 2 For i = 0 To 2 MsgBox k & " " & j & " " & i & "=" & d(k)(j)(i) Next i Next j Next k End Sub で動くことが判りました。VBAですが。 ただ上記はArrayのデータ数が少ないので、(27のうち 12しかないので)エラーで途中で止まりますが、増やせば旨く行くと思います。ご参考まで。 d(k)(j)(i)と表現するところがミソですね。 これが3次元配列なのかどうか判りませんが。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

配列の初期化の問題ですね。このご質問を見て、自分がこんな基本的なことも知らなかったことに愕然と(ちょっとオーバーです)しました。解説書やWEBを調べましたが、私の持っている本やWEBを見た限りでは載っていませんでした。 まだズバリ回答は出ていないように思うし、答えを知りたいこともあって、下記を上げてみます。 本当はd(i,j,k)の形で表せると良いのですが、d(i,j)(k) の形になりますが、下記を実行すると1から27が次々表示されるので、3次元配列的な値の設定と利用に使えると思います。 ただVBAでテストした事も気がかりですが、取りあえずあげて見ます。 Sub test02() Dim d(2, 2) d(0, 0) = Array(1, 2, 3) d(0, 1) = Array(4, 5, 6) d(0, 2) = Array(7, 8, 9) d(1, 0) = Array(10, 11, 12) d(1, 1) = Array(13, 14, 15) d(1, 2) = Array(16, 17, 18) d(2, 0) = Array(19, 20, 21) d(2, 1) = Array(22, 23, 24) d(2, 2) = Array(25, 26, 27) For k = 0 To 2 For j = 0 To 2 For i = 0 To 2 MsgBox d(k, j)(i) Next i Next j Next k End Sub #1のご回答のようにArrayのネストが可能なら、上記は 回りくどいですね。 Sub test03() Dim d As Variant d = Array(Array(Array("0-0", "0-1", "0-2"), Array("1-0", "1-1", "1-2")), Array(Array("0-0", "0-1", "0-2"), Array("1-0", "1-1", "1-2"))) For k = 0 To 2 For j = 0 To 2 For i = 0 To 2 MsgBox d(k, j, i) Next i Next j Next k End Sub を実行してみるとうまく行きませんでした。 MsgBox d(k, j, i)のところが問題だと思うのですが、小生は力不足で、どう表現するのか判りませんでした。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>2次元配列は以下の様になりますが、3次元配列はどう記述すればいいのでしょうか? 書かれている例、2次元配列ではないのですが。 この例ですと、1次元配列を要素にもつ1次元配列ですけど。 Dim phrase(0 To 1, 0 To 1) As Variant このような形式で宣言をして初めて2次元配列になります。

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

Dim phrase As Variant phrase = Array(Array(Array("0-0", "0-1", "0-2"), Array("1-0", "1-1", "1-2")), Array(Array("0-0", "0-1", "0-2"), Array("1-0", "1-1", "1-2")))

関連するQ&A

  • 2次元配列の宣言について

    文字列の配列の場合 Dim m As Variant Dim moji As String m=Array("aa","bb","cc","dd",・・・) moji=m(1) とすれば"bb"がmojiに代入されるのはわかるのですが これを二次元配列(3行4列)にする場合どのように 宣言(Dim~や、Array~)等はどのように記述すればよろしいですか? 基本的な質問でごめんなさい。 よろしくお願いします。

  • 二次元配列のVBA

    二次元配列のVBAの書き方がよくわからないのですが、 私が作ったサンプルプログラムのSub 二次元()において 二次元配列で表すにはどうすればいいのでしょうか? Sub 二次元()では 配列を格納する変数はtmpしか使っていませんが もう一つ配列を格納する用の変数を作ればいいのでしょうか? 数字とアルファベットは別々に取り出したいです。 ----------------------------------------------------- Sub 一次元() Dim myStr As String Dim tmp As Variant Dim i As Long For i = 1 To 5 myStr = myStr & "," & i Next myStr = Mid(myStr, 2) tmp = Split(myStr, ",") For i = LBound(tmp) To UBound(tmp) Debug.Print tmp(i) Next i End Sub Sub 二次元() Dim myStr As String Dim tmp As Variant Dim i As Long For i = 1 To 5 myStr = myStr & "," & i & "と" & Chr(64 + i) Next myStr = Mid(myStr, 2) tmp = Split(myStr, ",") For i = LBound(tmp) To UBound(tmp) Debug.Print tmp(i) Next i End Sub

  • VBA Redim において変数で次元を増やすには?

    お世話かけます。 Dim Rd(),Ar as variant Ar="1,1,1" ReDim Rd(Ar) 上記の様な変数(Ar)で結果として、3次元 Rd(1,1,1)としたいのですが、 一次元として処理されます。 ''''' Rd=Array(1,1,1) 否応なく、Rd(1)(1)(1)一次元として処理しています。 変数設定で多次元配列にする記述式か処理方法をご教示願います。

  • 3次元配列を1次元配列に

    例えば2次元配列だと, array[row*i+j] = a[n]; といったように1次元に直すことができますよね? 同様に3次元配列を1次元配列にしたい場合には arrayの中はどのような式をつかえばいいのでしょうか。 よろしくお願いします。

  • VB.NET 2次元配列

    二次元配列に関して質問があります。 二次元配列を定義します。 Dim a(,) As Integer = _ {{0, 0, 0, 0, 0, 0, 1, 1, 1}, _ {0, 0, 0, 0, 0, 1, 0, 0, 1}, _ {0, 0, 0, 0, 0, 0, 1, 1, 1}} 一次元配列を定義します。 Dim b() As Integer 一次元配列のb()に二次元配列a(,)の {0, 0, 0, 0, 0, 0, 1, 1, 1}の部分を 入れようとした場合、 どのように記載すればよろしいでしょうか? イメージ的には b = a(0) で出きると思ったのですが、 構文エラーとなってしまいます。 よろしくお願いします。

  • 2次元配列を多次元配列にする。

    2次元配列を多次元配列にする。 PHP5で 2次元目はすべて同じキーの2次元配列を 2次元目のキーごとの内容を共通項にまとめて、 多次元配列にする方法を教えてください。 キーの数は膨大なので、関数の再帰呼び出し で、きれいに処理したいのです。 説明文では説明しきれないので、 やりたいことは↓の通りです。 array[0] = array([one] => "あ", [twe] => "う" [three] => "き"); array[1] = array([one] => "あ", [twe] => "う" [three] => "く"); array[2] = array([one] => "あ", [twe] => "え" [three] => "け"); array[3] = array([one] => "あ", [twe] => "え" [three] => "こ"); array[4] = array([one] => "い", [twe] => "お" [three] => "さ"); array[5] = array([one] => "い", [twe] => "お" [three] => "し"); array[6] = array([one] => "い", [twe] => "か" [three] => "す"); array[7] = array([one] => "い", [twe] => "か" [three] => "せ"); という配列があったら、これを↓のようにしたいです。 array( [あ] => array( [う] => array ("き", "く") [え] => array ("け", "こ") ) [い] => array( [お] => array ("さ", "し") [か] => array ("す", "せ") )   ) どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPのようにスマートに配列の配列など記述する方法が

    PHPの場合、データ構造ですが以下のようになっています。 $a = array( "test1" => array( array(1,1), array("x", 2) ), "test2" => array( array(3,2), array("y", 1) ), ); これをエクセルVBAの場合、Scripting.Dictionaryを使えば連想配列が 可能ですが、PHPのようにスマートに配列の配列など記述する方法が わかりません。 Dim dic As Scripting.Dictionary set dic = New Scripting.dictionary dic.Add "test1", ???????????????? dic.Add "test2", ???????????????? スマートにデータ構造を実現できる方法が知りたいです。

  • 多次元配列は配列の配列である

    Java勉強中なんですが、参考書を読んでいて「多次元配列は、実際には配列の配列である。つまり、2次元配列(array[][])がある場合、実際にはこれをarray[0]、array[1]、array[2]、といった1次元配列に配列として扱う事ができる。」と書いてあり、例題で、 double array[][] = new double[5][]; array[0] = new double[500]; array[0] = new double[400]; array[0] = new double[300]; array[0] = new double[200]; array[0] = new double[100]; と書いてありました。これについてのこれ以上の説明はなく、理解できなくて困っています。ご教授宜しくお願いいたします。

    • ベストアンサー
    • Java
  • VB.NET2010 の多次元配列について

    すいません、教えてほしいです! VB.NET2010開発環境を利用しています。 多段配列を多次元配列に入れる方法を教えていただきたいです。 多段配列 Dim myArr1()() ↓ 多次元配列 Dim myArr2( , )

  • Functionの戻り値を2次元配列にする方法

    VB.NETを使いはじめた初心者です。 Functionの戻り値を2次元配列にして データを取得したいのですが、 「Doubleの1次元配列はDoubleから派生していないためDoubleの1次元配列の1次元配列の値をDoubleの2次元配列に変換できません」とエラーがでます。 どのように変更すればよいでしょうか。 ご教授願います。 Function f1 As Double()() Dim temp(2,3) As Double ・・・・・ Return temp End Function

専門家に質問してみよう