dポイントプレゼントキャンペーン実施中!

いつもお世話なっております。なかなか解決できなくて、ヘルプ求めにきました。
 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

A 回答 (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反転
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/06/03 16:17

回答ではありませんが、ここより「モーグ」とかの方が


詳しい人多いんじゃないでしょうか??

http://www.moug.net/
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/06/03 16:07

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