プロが教える店舗&オフィスのセキュリティ対策術

2次元配列を作成し、コレクションにAddし、
ループで処理をしたいと考えています。

Addしたものの、取り出す方法がわかりません。
ローカルウインドウで確認すると、値が表示されているので、 test に 2次元配列は追加されているようです。


  Dim test As Collection
Set test = New Collection
Dim tmp(0, 9) As String

tmp(0, 0) = "test"
tmp(0, 1) = "56"


test.Add tmp

tmp(0, 0) = "test2"
tmp(0, 1) = "tttt"

test.Add tmp

この後 test の中の2次元配列の値をループで取り出したいです。
取り出して、セルに代入する予定です。

どうかアドバイスをお願いいたします。

A 回答 (2件)

こんな感じですかね。


Sub Sample()
  Dim test As Collection
  Dim tmp(0, 9) As String
  Dim ary As Variant
  Dim i As Integer

  Set test = New Collection

  tmp(0, 0) = "test"
  tmp(0, 1) = "56"
  test.Add tmp

  tmp(0, 0) = "test2"
  tmp(0, 1) = "tttt"
   test.Add tmp

  tmp(0, 0) = "test3"
  tmp(0, 1) = "zzz"
  test.Add tmp

  Debug.Print "データ数 : " & test.Count

  For Each ary In test
    Debug.Print ary(0, 0)
    Debug.Print ary(0, 1)
  Next

  Worksheets.Add Before:=Worksheets(1)

  For i = 1 To test.Count
    Range(Cells(i, 1), Cells(i, 10)) = test(i)
  Next

  Worksheets.Add Before:=Worksheets(1)

  For i = 1 To test.Count
    ary = test(i)
    Range(Cells(1, i * 2), Cells(10, i * 2)) = WorksheetFunction.Transpose(ary)
  Next
End Sub
    • good
    • 5
この回答へのお礼

まさにそのとうりです。
セルに取り出すところまでありがとうございます。

お礼日時:2016/01/26 23:09

こんなかんじで如何ですか?


値の無い要素もありますので、if文で選別して表示させています。

Sub foo()
Dim test As Collection
Set test = New Collection
Dim tmp(1, 9) As String ' tmp(0,9)を書き換えmした
Dim i As Long, j As Long

tmp(0, 0) = "test"
tmp(0, 1) = "56"
test.Add tmp

tmp(1, 0) = "test2" ' 最初の要素番号を書き換えました
tmp(1, 1) = "tttt" ' 同上
test.Add tmp

For i = 0 To UBound(tmp, 1)
For j = 0 To UBound(tmp, 2)
If tmp(i, j) <> "" Then ' 文字列が代入されている要素のみ表示させる。
MsgBox tmp(i, j) ' メッセージとして表示
End If
Next
Next
End Sub
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
UBound(tmp,1)のような使い方はしらなかったので助かりました。

今回は2次元配列のtmp(1,9) の 1の部分を動的に変えたかったのですが、
調べてみたら無理とのこと。
tmp(0,9)を作成し、データ入力→collection に add し、
ループでとれたらいいなと思い質問しました。
siffon9 さん ありがとうございました。

お礼日時:2016/01/26 08:47

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A