プロが教えるわが家の防犯対策術!

文字列の配列の場合
Dim m As Variant
Dim moji As String

m=Array("aa","bb","cc","dd",・・・)
moji=m(1)

とすれば"bb"がmojiに代入されるのはわかるのですが
これを二次元配列(3行4列)にする場合どのように
宣言(Dim~や、Array~)等はどのように記述すればよろしいですか?


基本的な質問でごめんなさい。
よろしくお願いします。

A 回答 (6件)

oribeyakiさん ありがとうございます。


「Type」の意味は「独自の構造体をつくってみては?」という事だったのですね。
それならば納得です。
感謝です。
    • good
    • 0

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のレコードをそのまま取り込めるので非常に便利)

でわ。
    • good
    • 0

サンプルです。

全て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」とありますが、ぼくはその方法を知らないです。
その方法はどんな方法か、もしこの発言を見てたらサンプルを載せてもらえませんか?
    • good
    • 0
この回答へのお礼

いつもいつもありがとうございます。

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

お礼日時:2002/01/15 00:57

こんにちは。

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)
として、各要素の値を代入していきます。
では。
    • good
    • 0
この回答へのお礼

返事遅くなってごめんなさい。
ぱそこん、調子わるくて。

回答ありがとうございました。
この方法でやり成功しました。
ありがとうございました。

お礼日時:2002/01/15 00:53

単純に



Dim a(1, 10) As Stringじゃ駄目ですか?
3次元なら Dima(1,10,100) As String

配列の大きさが変動するなら
コードの途中で
Redim a(1,10,100)とかって…
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/01/15 00:58

typeを使うのはだめ?


うちはそうしたけど、結構便利だった
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!