• ベストアンサー

VBの配列について

VB6.0について質問です。 データベースにある1レコードの情報を一括して取得し 変数に配列化して格納したいのですが可能ですか? データベースはAccessです。 DAOで接続を考えております。 以下のソースを試したのですが駄目でした><; dim ITEM_A() For tmp1 = 0 To ds.Fields.Count - 1 Step 1 ITEM_A = Replace(ds.Fields(tmp1).Value, vbCrLf, "") Next ITEM_A(0)=data1 ITEM_A(1)=data2 ITEM_A(3)=data3 ITEM_A(4)=data4 以上のように格納したいのでお願いします><

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

  • ベストアンサー
  • X-trail_00
  • ベストアンサー率30% (438/1430)
回答No.1

dim ITEM_A(0) For tmp1 = 0 To ds.Fields.Count - 1 Step 1 Redim Preserve ITEM_A(tmp1) ITEM_A(tmp1) = Replace(ds.Fields(tmp1).Value, vbCrLf, "") Next こうすれば動かないですか?

その他の回答 (2)

  • ctrlzr
  • ベストアンサー率29% (18/62)
回答No.3

DAOであれば、Recordset.GetRows メソッドで、配列が取得できます。ただし、1レコードでも2次元配列になってしまうので、1次元にする作業が必要です。 'こんな感じになるかと思いますが、試してはいません。 dim ITEM_A dim v v = ds.GetRows(1) redim ITEM_A(ubound(v,2)) For tmp1 = lbound(v,2) To ubound(v,2) ITEM_A(tmp1) = v(lbound(v,1),tmp1) Next

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

アクセスVBAで今テストやってみた例を上げます。 よくWEBや解説書の例題で載っているものです。 Msgboxのところを、配列名(j)=で受けて、J=J+1で繰り回せばフィールドの値が、配列にセットされます。配列にわざわざ、格納しなくても良いケースが多いと思うが。 ITEM_A = Replace(ds.Fields(tmp1).Value, vbCrLf, "") は、他例では見たことのない処理で、何をやっいるのか判りません。 なぜvbCrLfを削除する必要があるのやら(私が知らないだけかも?)。 Sub test02() Dim db As DAO.Database Dim rs As DAO.Recordset Dim strMsg As String Set db = CurrentDb() Set rs = db.OpenRecordset("生徒") Do Until rs.EOF For i = 0 To rs.Fields.Count - 1 MsgBox Nz(rs.Fields(i)) Next i rs.MoveNext Loop MsgBox "終わり" rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub

関連するQ&A

  • VBA 乱数と配列

    VBA 乱数と配列 配列(0)~配列(5)の一次元配列の中に、1から6までの数字を重複しないように入れたいのですが、 上手くいきません。 ご指導の程、お願いします。 Sub rndsys() Dim 配列(5) As Integer Dim サイコロ As Integer Dim カウントA As Integer Dim カウントB As Integer Dim フラグ As Integer For カウントA = 0 To 5 Do サイコロ = Int(Rnd(1) * 6) + 1 For カウントB = 0 To 5 If 配列(カウントB) = サイコロ Then フラグ = フラグ + 1 End If Next カウントB Loop Until フラグ > 0 配列(カウントA) = サイコロ Next カウントA MsgBox 配列(0) & vbCrLf & 配列(1) & vbCrLf & 配列(2) & vbCrLf & 配列(3) & vbCrLf & 配列(4) & vbCrLf & 配列(5) End Sub

  • 配列のSession格納、及び取得方法について

    お世話になります。 現在Visual Studio 2005でプログラム作成中です。 質問内容は、 配列(文字列を格納)をSessionに渡し、次ページでその配列の値を取得できるかという点です。 ***(a.aspx.vb)抜粋*** Dim a() As String Redim a(DataTable1.Rows.Count) For i As Integer 0 to DataTable1.Rows.Count - 1 a(i) = CType(DataTable1.Rows(i).Item(0)) Next Session("a.list") = a(DataTable1.Rows.Count) Session("a.count") = DataTable1.Rows.Count ***(b.aspx)抜粋*** Dim b() As String = CType(Session("a.list"), String) Dim bCount as integer = CType(Session("a.count"),Integer) Dim Name as String For i As Integer 0 To bCount Name = CType(b(i),String) Next としているのですが、取得できません。 配列に格納されたものをSessionに格納し、取得することは可能なのでしょうか。 また、その他に適切なものがあればご教授ください。 よろしくお願いいたします。

  • VB 配列

    今,VBでテキストファイルを読込み配列に入れるという作業を書いたのですが,うまくいきません. 初回例外が発生してしまいます.配列は文字列の配列になります. どなたかご教示のほどよろしくお願いいたします. 'ファイルの読込み Dim path1 As String = "C:\Users\aleph_H.S\Desktop\気象台データインポートツール\気象台データインポートツール\" Dim path2 As String = "気象台データリスト.txt" Dim Mypath As String = path1 + path2 ' StreamReader の新しいインスタンスを生成する Dim cReader As New System.IO.StreamReader(Mypath, System.Text.Encoding.Default) ' 読み込んだ結果をすべて格納するための変数を宣言する Dim stResult As String = String.Empty Dim matrix(,) As String Dim ic As Long = 0 Dim icc As Long = 0 ReDim Preserve matrix(80, 3) ' 読み込みできる文字がなくなるまで繰り返す While (cReader.Peek() >= 0) ' ファイルを 1 行ずつ読み込む Dim stBuffer As String = cReader.ReadLine() ' 読み込んだものを追加で格納する stResult &= stBuffer & System.Environment.NewLine ic = ic + 1 'カンマ区切りで分割して配列に格納する Dim stArrayData As String() = stResult.Split(","c) For Each sstData In stArrayData icc = icc + 1 '文字列をInteger型に変換 matrix(ic - 1, icc - 1) = sstData Next End While cReader.Close()

  • csvデータの番号付加について。

    例題の csvデータの内容が 配列1 aaaaa aaaaa aaaaa bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb ccccc ccccc だった場合、配列が1つ増え ↓ 配列1 配列2 aaaaa 00001-1 aaaaa 00001-2 aaaaa 00001-3 bbbbb 00002-1 bbbbb 00002-2 bbbbb 00002-3 bbbbb 00002-4 bbbbb 00002-5 ccccc 00003-1 ccccc 00003-2 管理番号が増えていきます。 Sub main() Dim branch As Long Dim count As Long Dim i As Long Dim tmp As Long tmp = FreeFile Dim data As Variant With CreateObject("Scripting.FileSystemObject").GetFile("C:\データ.csv").OpenAsTextStream data = Split(.readall, vbCrLf) End With branch = 1 count = 1 Open "C:\出力データ.csv" For Output As #tmp Print #tmp, data(i) & vbTab & Format(branch, "00000") & vbTab & count For i = LBound(data) + 1 To UBound(data) If data(i) = data(i - 1) Then count = count + 1 Else branch = branch + 1 count = 1 End If Print #tmp, data(i) & vbTab & Format(branch, "00000") & vbTab & count Next i Close #tmp End Sub 例えば、タブ区切りの配列が元データで5つあり 配列5番目だけを指定し、例題のようにcsvを作成したいのですが 配列の宣言はまだしておりません。 アドバイスいただけないでしょうか。 よろしくお願いいたします。 元データ 配列1 配列2 配列3 配列4 配列5 a 1 c a aaaaa a 2 c b aaaaa a 3 c c aaaaa a 4 c d bbbbb a 5 c e bbbbb a 6 c f bbbbb a 7 c g bbbbb a 8 c h bbbbb a 9 c i ccccc a 0 c j ccccc 出力データ 配列1 配列2 配列3 配列4 配列5 配列6 a 1 c a aaaaa 00001-1 a 2 c b aaaaa 00001-2 a 3 c c aaaaa 00001-3 a 4 c d bbbbb 00002-1 a 5 c e bbbbb 00002-2 a 6 c f bbbbb 00002-3 a 7 c g bbbbb 00002-4 a 8 c h bbbbb 00002-5 a 9 c i ccccc 00003-1 a 0 c j ccccc 00003-2

  • 1次元配列のソート方法

    配列のソートメソッドについて質問させていただきます。 VB.NET初心者なので日本語がおかしいかもしれませんが、宜しくお願いいたします。 データテーブルが格納されている配列があり、 その配列をソートしたいと思っています。 データテーブルの中に「NO」と「ID」というフィールドがあります。 NOで昇順し、NOが同じだったらIDの昇順でソートといったことがしたいのですが、 条件によっては上手くいきません。 よろしければ、教えていただけないでしょうか? また、もっと効率の良い方法とかありましたら、具体的はソース等教えていただけないでしょうか? 宜しくお願いいたします。 [例] workDT() ← 元のデータテーブル配列 Dim Datatable(workDt.Rows.Count-1) As DataTable ← ソート後のデータテーブル配列 Dim tmpDatatable(workDT.Rows.Count-1) As DataTable ← 途中で使うデータテーブル配列 Dim NO(workDT.Rows.Count-1) As Integer ← 元のデータテーブル配列の各「NO」フィールドを格納する配列 Dim ID(workDT.Rows.Count-1) As String ← 途中で使うデータテーブル配列の各「ID」フィールドを格納する配列 Dim Index(workDT.Rows.Count-1) As Integer ← インデックスに使用 ' IDでソート For i = 0 To workDt.Length - 1 ID(i) = workDt(i).Rows(0).Item("ID") Index(i) = i Next ' 配列をIDでソート Array.Sort(ID, Index) ' ソート後配列をテンプ配列に格納 For i = 0 To workDt.Length - 1 tmpDatatable(i) = workDt(Index(i)).Copy Next ' NOでソート For i = 0 To tmpDatatable.Length - 1 NO(i) = tmpDatatable(i).Rows(0).Item("NO") Index(i) = i Next ' 配列をNOでソート Array.Sort(NO, Index) ' ソート後配列を格納 For i = 0 To tmpDatatable.Length - 1 Datatable(i) = tmpDatatable(Index(i)).Copy Next これで各配列を初期化します。 workDTに5つのデータテーブルが入っていて workDT(0):ID=3、NO=1 workDT(0):ID=1、NO=5 workDT(0):ID=2、NO=5 workDT(0):ID=4、NO=5 workDT(0):ID=5、NO=7 (IDは重複不可設定、NOは重複可設定です。) とした場合、NOのソートのところで変な順番になってしまいます。 Array.Sort(NO, Index) このメソッドは同じ値だった場合、何を優先してソートしているのでしょうか? 環境はWindowsXPSP3とVB2005です。

  • 二次元配列の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

  • 配列をソートさせたとき、もう一方の配列も同じようにソートさせたい

    タイトルが意味不明で申し訳ありません。 二つの配列があるとします。 片方には文字列、もう片方には数値が記録されているもので、最大添え字は同じです。 この数値の大きい順に並べ替えを行いたいのですが、 name[0]とcount[0] name[1]とcount[1] ・ ・ をペアで並べ替えたいのですが、その方法が分かりません。 sort関数を使うとどうしても片方のみしかソートできないし、バブルソートを用いて試みましたが、どうも並び替えられません。 連想配列を使う考えもありましたが、2つの配列をどうやって一つのハッシュに格納すればいいか分からず断念しました。 バブルソートの方にバグがあるのかもしれませんが、何か方法があればご教授いただけると幸いです。 よろしくお願いします。 バブルソート部分のソース(配列は@filelistと@countを使用) # ソート処理 for($i=0;$i<$#filelist;$i++){ for($j=0;$i<$j;$j++){ if($count[$i]<$count[$i+1]){ $tmp=$count[$i]; $count[$i]=$count[$i+1]; $count[$i+1]=$tmp; $tmp=$filelist[$i]; $filelist[$i]=$filelist[$i+1]; $filelist[$i+1]=$tmp; $k=$j; } $i=$k; } }

    • ベストアンサー
    • Perl
  • 改行コード検索

    VB6.0について質問です。 ある文字列のデータの中にある改行コードをみつけ それを取り除いた文字データだけを取得したいのですがうまくいきません>< 現在実行しているコードは以下の通りです。 For ixA = 1 To Len(ds.Fields(tmp1).Value) If Mid(ds.Fields(tmp1).Value, ixA, 2) = vbCrLf Then MOJI = MOJI & Mid(ds.Fields(tmp1).Value, ixA, ixA - 1) & Mid(ds.Fields(tmp1).Value, ixA + 1, ixA) End If Next ixA 文字列を結合するところでわけがわからなくなりました><; 正しいコードか他のやり方をご存知の方ご回答よろしくお願いします!

  • 変数を配列に格納する時に、二つの条件を指定すること

    変数を配列に格納する時に、二つの条件を指定することはできますか? VBAです。 Private Sub test() Dim i As Long Dim Str As String Dim tmp As Variant Str = "a,i,u-e-o" tmp = Split(Str, ",") '配列に格納する For i = LBound(tmp) To UBound(tmp) Debug.Print tmp(i) Next i End Sub の場合、結果が a i u-e-o になってしまいます。 tmp = Split(Str, "," or "-") のようなことをして a i u e o と表示させたいです。 "a,i,u-e-o"を"a,i,u,e,o"にすることはできません。ご教授よろしくお願いします。

  • 配列の受け渡しについて

    初めて投稿します。 手詰まりになってしまい、お知恵を拝借できればと思います。 Dim Cnt Dim A() Dim c Cnt = カウント件数(Select文でのカウント件数) ReDim A(Cnt) c = 0 DO UNTIL SQLrs.EOF A(c) = SQLrs.Fields("フィールド名") c = c + 1 LOOP としてAの配列に格納しているのですが、これをASPの次のページに渡したいのですが、うまくわたせません。 <input type="hidden" name="aaa" value="<%= A %>"> として 次のページで aaa = Request.Form("aaa") で配列の値まではは取得できないのでしょうか? どうかよろしくお願いいたします。

専門家に質問してみよう