• 締切済み

Access レコードを分割してフォームで表示

Access 2007です。 下記のような日記テーブルがあり、 その「行動」フィールドの中身を「●」の記号で レコードに分割して、 フォームに表示したいと思っています。 日記テーブル ID 年月日   天気  行動 1 2014/1/10  晴  ●読書。●新聞を読む。●散歩。 2 2014/1/11  曇  ●電車に乗る。●新年会。●庭の手入れ。●カラオケ。 3 2014/1/12  曇  ●昼寝。 4 2014/1/13  雨  ●買い物。●読書。 ・・・・ 結果フォーム(データシートビュー)で表示 年月日    行動 2014/1/10  読書。 2014/1/10  新聞を読む。 2014/1/10  散歩。 2014/1/11  電車に乗る。 2014/1/11  新年会。 2014/1/11  庭の手入れ。 2014/1/11  カラオケ。 2014/1/12  昼寝。 2014/1/13  買い物。 2014/1/13  読書。 もとの日記テーブルのデータは変更しません。 下記のように、VBAのコードの中で、 レコードセットを使えば、上記のようなレコードの分割ができると思うのですが、 うまくいきません。 rs2というレコードセットをどうやって作成すればいいのかわかりません。 (Set rs2 = DB.OpenRecordset ・・・ のような行が必要ではないか、と思うのですが、 そのやり方がわかりません。) やり方を教えていただけたら幸いです。 Dim DB As DAO.Database Set DB = CurrentDb() Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset Set rs1 = DB.OpenRecordset("日記テーブル", dbOpenForwardOnly) Dim A As Variant Do Until rs1.EOF A = Split(rs1!行動, "●") For i = 1 to UBound(A) rs2.AddNew rs2!年月日 = rs1!年月日 rs2!行動 = rs1!A(i) rs2.Update Next i rs1.MoveNext Loop DoCmd.OpenForm "結果フォーム" Set Forms!結果フォーム.Recordset = rs2

みんなの回答

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

No1です。 変数の宣言の順序について述べておきます。 質問では、 Dim DB As DAO.Database Set DB = CurrentDb() Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset Set rs1 = DB.OpenRecordset("日記テーブル", dbOpenForwardOnly) これを、No1の回答も加えて、 Dim DB As DAO.Database Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset Dim i As Long Set DB = CurrentDb() Set rs1 = DB.OpenRecordset("日記テーブル", dbOpenForwardOnly) Set rs2 = DB.OpenRecordset("結果テーブル", dbOpenDynaset) のように行儀良く並べると見通しがよくなります。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

(1) rs2に設定するテーブル名を「結果テーブル」として Set rs2 = DB.OpenRecordset("結果テーブル", dbOpenDynaset) のように設定しておきます。 (2) A = Split(rs1!行動, "●") のようにすると、先頭の「●」を区切り文字として 判定し、先頭の前にないものを文字列とするように なるのでエラーを起こします。そのために文字列の先頭の 「●」を除いた文字列を対象とするために、 A = Split(Right(rs1!行動, Len(rs1!行動) - 1), "●") とします。つまり、たとえば、 「●読書。●新聞を読む。●散歩。」 の、 「読書。●新聞を読む。●散歩。」 を対象とする、ということです。 (3) rs2!行動 = rs1!A(i) この記述は間違いです。単に rs2!行動 = A(i) です。 (4) 変数iが設定されていません。 Dim i As Long を変数宣言しておく。 以上です。なお、 DoCmd.OpenForm "結果フォーム" Set Forms!結果フォーム.Recordset = rs2 については、最初から「結果フォーム」のレコードソースを 「結果テーブル」にしておき、「既定のビュー」を 「データシート」にしておけば、 DoCmd.OpenForm "結果フォーム" だけですが。

関連するQ&A