• 締切済み

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

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

みんなの回答

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.6

oribeyakiさん ありがとうございます。 「Type」の意味は「独自の構造体をつくってみては?」という事だったのですね。 それならば納得です。 感謝です。

  • oribeyaki
  • ベストアンサー率45% (18/40)
回答No.5

1の方ではないですが、「TYPE」です。 (※用法的にはTYPEと動的配列を併用することが多いです) ◇宣言部 Private Type TEST   strA As String   strB As String   lngC As Long End Type Private TestArray() As TEST 実行部 sub subTEST() Dim I as integer ReDim TestArray(0 to 9) For I = 0 To 9 TestArray(I).strA = "A" TestArray(I).strB = "B" TestArray(I).lngC = I Next このような形になります。 この利点としては、異なるデータ型のものを一元管理できることがあげられます。 (DBのレコードをそのまま取り込めるので非常に便利) でわ。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.4

サンプルです。全て2次元配列を作成します。 しかし、※3subArrayは2次元配列のように見せているだけで、VBでいう2次元配列というものとは、ちょっと違います。 ※1と※2は配列要素が宣言してあるのと、実行途中で要素が定まるという違いがあります。 ※1に適したものの例(要素数が変わることがなく、要素数があらかじめわかっているもの) 信号の色、性別、都道府県、血液型 など ※2に適したものの例(要素数が変わる恐れがある。もしくは要素数があらかじめわからない) 生徒の数、ユーザに都道府県を選択させたあとの市町村の数 など ※3に適したものの例 特に適したものはないが、プログラミングが楽。ただ宣言がVariantであるためにメモリ消費が大きいので、膨大な配列には使用を避けた方がいいかも? ※1 Sub subDim()   Dim m(2, 3) As String      Dim i  As Long   Dim j  As Long      m(0, 0) = "aa": m(0, 1) = "bb": m(0, 2) = "cc": m(0, 3) = "dd"   m(1, 0) = "ee": m(1, 1) = "ff": m(1, 2) = "gg": m(1, 3) = "hh"   m(2, 0) = "ii": m(2, 1) = "jj": m(2, 2) = "kk": m(2, 3) = "ll"      For i = LBound(m, 1) To UBound(m, 1)     For j = LBound(m, 2) To UBound(m, 2)       Debug.Print m(i, j),     Next j     Debug.Print   Next i End Sub ※2 Sub subRedim()   Dim m() As String      Dim i  As Long   Dim j  As Long      ReDim m(2, 3) As String   m(0, 0) = "aa": m(0, 1) = "bb": m(0, 2) = "cc": m(0, 3) = "dd"   m(1, 0) = "ee": m(1, 1) = "ff": m(1, 2) = "gg": m(1, 3) = "hh"   m(2, 0) = "ii": m(2, 1) = "jj": m(2, 2) = "kk": m(2, 3) = "ll"      For i = LBound(m, 1) To UBound(m, 1)     For j = LBound(m, 2) To UBound(m, 2)       Debug.Print m(i, j),     Next j     Debug.Print   Next i End Sub ※3 Sub subArray()   Dim m  As Variant      Dim i  As Long   Dim j  As Long      m = Array(Array("aa", "bb", "cc", "dd"), Array("ee", "ff", "gg", "hh"), Array("ii", "jj", "kk", "ll"))      For i = LBound(m) To UBound(m)     For j = LBound(m(i)) To UBound(m(i))       Debug.Print m(i)(j),     Next j     Debug.Print   Next i End Sub それと#1のBigBoobsさんの発言で「type」とありますが、ぼくはその方法を知らないです。 その方法はどんな方法か、もしこの発言を見てたらサンプルを載せてもらえませんか?

sakky_t
質問者

お礼

いつもいつもありがとうございます。 ここに質問するといっつも 知らないことばっか吸収できてすごく 勉強になります。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 配列の要素数が決まっている場合(例えば3行4列)は、 Dim m(2, 3) As String Dim moji As String m(0, 0) = "aa" m(0, 1) = "bb"   :   : moji = m(0, 1) こんな感じで良いのではじゃないでしょうか。 要素数が未定の場合は動的配列宣言して、後で宣言をしなおせば良いと思いますが。 Dim m() As String 要素数がa行b列に決まったら、 ReDim m(a-1, b-1) として、各要素の値を代入していきます。 では。

sakky_t
質問者

お礼

返事遅くなってごめんなさい。 ぱそこん、調子わるくて。 回答ありがとうございました。 この方法でやり成功しました。 ありがとうございました。

  • hysteric5
  • ベストアンサー率28% (4/14)
回答No.2

単純に Dim a(1, 10) As Stringじゃ駄目ですか? 3次元なら Dima(1,10,100) As String 配列の大きさが変動するなら コードの途中で Redim a(1,10,100)とかって…

sakky_t
質問者

お礼

回答ありがとうございました。 3次元の配列もあるんですね? 正直びっくりです。

  • BigBoobs
  • ベストアンサー率36% (16/44)
回答No.1

typeを使うのはだめ? うちはそうしたけど、結構便利だった

関連するQ&A

  • 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")

  • ExcelVBAで配列に一気にデータを入れる

    かすかな記憶で申し訳ありませんが、変数をVariant型で宣言しておくと、","で区切られた文字列は、一気に配列として代入出来ると聞いた気がしています。色々と試してみたのですが、よくわかりません。よろしくお願いいたします。 Dim a as Variant dim myText as string myText = "月曜,火曜,水曜,木曜,金曜,土曜,日曜" のような感じで(実際のカンマで区切られた文字列は100個ぐらい要素があります)一気に代入して、aを配列として扱いたいのです。 よろしくお願いいたします。

  • 二次元配列が、勝手に一次元配列になってしまう

    Excelのマクロで、二次元配列を格納したバリアント型を戻り値とする関数を作ったのですが、… 二次元型配列のひとつの要素数が1の時、受け取ったバリアント型変数は、一次元配列になっています。 列ベクトルなら、それもありかな~と思うのですが、なんで、行ベクトルまで、一次元配列にするんだよ~って、困っています。 シートから関数を呼んだ場合は、列ベクトルは列ベクトル、行ベクトルは行ベクトルとして、表示されるので、マクロの中で関数を呼び出した場合も、行列の情報を保持できる方法があるんじゃないかと思ったのですが。 どなたか、ご教示頂けるとありがたいです。 よろしくお願いします。

  • 多次元配列から値を抽出する方法

    Array ( [0] => Array ( [0] => Array ( [0] => Array ( [1] => XX ) ) [1] => AA [2] => BB [3] => CC [4] => DD ) ) 上記配列から値(XX)を1つの変数に取り出すにはどうすればよろしいでしょうか?

    • ベストアンサー
    • PHP
  • pythonの多次元配列へのデータ入力

    pythonの多次元配列で以下のように、ループのカウンタのn,mで配列の位置を指定して代入することができないようです。このような場合どう処理するのでしょうか。 for n in range(1:10) for m in range(1:10) a[n][m]=f(n/m) なお、aについては使用の宣言はしておらず、メモリも確保されていません。fは別途用意されています。 また、a[2][3]=1.3 のように配列の場所を指定して代入するのもダメのようです。numpy.arrayとかで宣言するのかなと思うのですが。使用例が見つかりません。2次元配列だけでなく3次元配列だとどうなるかなと思うのですが。 科学技術計算はこんなのばっかりです。pythonはそのようなものに向くでしょうか。いろんなものがpython対応になってきているので速さの問題があっても器用な処理ができるのなら選択されることも多いと思いますが。 よろしくお願いします。

  • 二次元配列の参照とデータ取得について

    いつもお世話になっております。 C言語で以下のようなことをしたいのですが可能でしょうか。 <二次元配列のデータ> [AA,11][BB,22][CC,33] ・検索文字列⇒"BB" 上記検索文字列"BB"が二次元配列データの左側(AA,BB,CCなど)と 照合されて一致した場合、その照合した配列の右側(11,22,33)を アウトプットとして返すようにしたいのですが実現可能でしょうか。

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

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

  • 多次元配列

    初歩的な質問ですみません。 PHPプログラミングでの質問です。 仮に、多次元配列Aに、 Array( [0] => Array ( [0] => 6 ) [1] => Array ( [0] => 2 [1] => 1 ) [2] => Array ( [0] => 0 [1] => 5 [2] => 4 ) ) 多次元配列Bに、 Array( [0] => Array ( [0] => りんご ) [1] => Array ( [0] => ぶどう [1] => パイナップル ) [2] => Array ( [0] => みかん [1] => すいか [2] => メロン ) ) のように値が入っている場合、配列Aの値を参照して 値の大きいものから順に、それに対応する配列Bの値を取り出し、 あたらしい配列Cに代入する処理の書き方を教えて下さい。 上記の例ですと、配列Cが、 Array ( [0] => りんご [1] => すいか [2] => メロン [3] => ぶどう [4] => パイナップル [5] => みかん ) となるようにしたいです。 よろしくお願いします。 長文失礼しました。

    • ベストアンサー
    • PHP
  • 二次元配列の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

  • 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) で出きると思ったのですが、 構文エラーとなってしまいます。 よろしくお願いします。