- 締切済み
2次元配列の宣言について
文字列の配列の場合 Dim m As Variant Dim moji As String m=Array("aa","bb","cc","dd",・・・) moji=m(1) とすれば"bb"がmojiに代入されるのはわかるのですが これを二次元配列(3行4列)にする場合どのように 宣言(Dim~や、Array~)等はどのように記述すればよろしいですか? 基本的な質問でごめんなさい。 よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- TAGOSAKU7
- ベストアンサー率65% (276/422)
oribeyakiさん ありがとうございます。 「Type」の意味は「独自の構造体をつくってみては?」という事だったのですね。 それならば納得です。 感謝です。
- oribeyaki
- ベストアンサー率45% (18/40)
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)
サンプルです。全て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」とありますが、ぼくはその方法を知らないです。 その方法はどんな方法か、もしこの発言を見てたらサンプルを載せてもらえませんか?
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。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) として、各要素の値を代入していきます。 では。
お礼
返事遅くなってごめんなさい。 ぱそこん、調子わるくて。 回答ありがとうございました。 この方法でやり成功しました。 ありがとうございました。
- hysteric5
- ベストアンサー率28% (4/14)
単純に Dim a(1, 10) As Stringじゃ駄目ですか? 3次元なら Dima(1,10,100) As String 配列の大きさが変動するなら コードの途中で Redim a(1,10,100)とかって…
お礼
回答ありがとうございました。 3次元の配列もあるんですね? 正直びっくりです。
- BigBoobs
- ベストアンサー率36% (16/44)
typeを使うのはだめ? うちはそうしたけど、結構便利だった
お礼
いつもいつもありがとうございます。 ここに質問するといっつも 知らないことばっか吸収できてすごく 勉強になります。