- ベストアンサー
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
- みんなの回答 (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反転
その他の回答 (1)
- tyg0911
- ベストアンサー率54% (6/11)
回答ではありませんが、ここより「モーグ」とかの方が 詳しい人多いんじゃないでしょうか?? http://www.moug.net/
お礼
ご情報、ありがとうございます。モーグでACCESSに関する参考資料が多く、大変気にいりました。お気に入りへ b
お礼
無事問題解決しました。説明もついてて、大変参考になりました。感謝です。ありがとうございます。