• ベストアンサー

Access VBA(データを横並べで追加)について

いつもお世話なっております。なかなか解決できなくて、ヘルプ求めにきました。  OS- XP SP2 ACCESS2003 T1(テープル) ID    店名 連番 ----------------------- 1 A 1 2 A 2 3 A 3 4 B 4 5 B 5 6 B 6 7 C 7 8 C 8 9 C 9 ---------------------------- T2(空) ID(オート)店名1  店名2 ----------------------------- T1の店名をT2へ横並べて追加したいので、↓のようににソースを書きました。 希望結果↓ ID(オート)店名1 店名2 ----------------------- 1 A A 2 A B 3 B B 4 C C 5 C Private Sub コマンド0_Click() Dim db As DAO.Database Dim RS1 As Recordset Dim RS2 As Recordset Dim fld As Field Dim A As Integer Set db = CurrentDb() Set RS1 = db.OpenRecordset("T1", dbOpenTable) Set RS2 = db.OpenRecordset("T2", dbOpenTable) RS1.MoveFirst For A = 1 To RS1.RecordCount If RS1![連番] Mod 2 <> 0 Then RS2.AddNew RS2![店名1] = RS1![店名] ElseIf RS1![連番] Mod 2 = 0 Then RS2![店名2] = RS1![店名] RS2.Update End If RS1.MoveNext Next MsgBox "終わり", vbExclamation RS1.Close RS2.Close End Sub 質問1-自分のこの書き方でデータ店名のCが一つ消えてしまいます。原因を教えてください。 質問2-後、店名が変わる時、店1からスタートさせたいですが、どうすれば、いいんでしょうか。 希望結果↓ T2 ID    店名1   店名2 ----------------------------- 1 A A 2 A 3 B B 4 B 5 C C 6 C

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

詳しくなくて申し訳ありません。 私なりの回答です。 得られたレコード順に処理する例となります。 質問1への回答) RS2 の Update していないから。 RS1.MoveFirst A = 1 While (Not RS1.EOF)   If (A = 1) Then RS2.AddNew   RS2("店名" & A) = RS1![店名]   A = 3 - A   If (A = 1) Then RS2.Update   RS1.MoveNext Wend If (A <> 1) Then RS2.Update 質問2への回答) Dim sTmp As String を追加 RS1.MoveFirst A = 1 sTmp = "" While (Not RS1.EOF)   If (RS1![店名] <> sTmp) Then     If (A <> 1) Then RS2.Update     A = 1     sTmp = RS1![店名]   End If   If (A = 1) Then RS2.AddNew   RS2("店名" & A) = RS1![店名]   A = 3 - A   If (A = 1) Then RS2.Update   RS1.MoveNext Wend If (A <> 1) Then RS2.Update ※ A は1か2の値をとるもので、A = 3 - A で1と2反転

sky070
質問者

お礼

 無事問題解決しました。説明もついてて、大変参考になりました。感謝です。ありがとうございます。

その他の回答 (1)

  • tyg0911
  • ベストアンサー率54% (6/11)
回答No.1

回答ではありませんが、ここより「モーグ」とかの方が 詳しい人多いんじゃないでしょうか?? http://www.moug.net/

sky070
質問者

お礼

 ご情報、ありがとうございます。モーグでACCESSに関する参考資料が多く、大変気にいりました。お気に入りへ b   

関連するQ&A

専門家に質問してみよう