人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ACCESS2003の質問です。
下記のようなテーブルがあります。

[受注番号] [商品]

12345 A
*******

67890 B
-------
C
-------
D
*******

68427 F
-------
E
*******

レコード数は3です。
商品フィールドには、改行が入っています。
-------や*******は、段落の区切りとしていれてある
そのままの文字列です。
商品が複数の場合は、間に-------が入り、
1番最後には、かならず*******が入っています。

これを
[受注番号] [商品]
12345 A
67890 B
67890 C
67890 D
68427 F
68427 E

という6つのレコードに分けたいです。
方法を教えてください。


●質問者: rupopon
●カテゴリ:コンピュータ 学習・教育
✍キーワード:フィールド レコード 文字列 段落
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● GreenStar
●100ポイント ベストアンサー
Sub cr()
 ' 改行で行分割するコード
 ' 変数宣言 今回はDAOを使った。ツール→参照設定でMicrosoft DAO 3.6 Object Library にチェック!
 ' http://support.microsoft.com/kb/825796/ja も見ておくと良い
 Dim db As DAO.Database
 Dim rs1 As DAO.Recordset, sqlStr1 As String
 Dim rs2 As DAO.Recordset, sqlStr2 As String
 Dim splitStr As String, splitArray As Variant, splitArrayUbound As Long
 Dim i As Long, d As String
 
 ' 読み込むテーブル(SQLで書く)
 sqlStr1 = "SELECT * FROM テーブルA"
 ' 書き込むするテーブル(テーブル名だけ書く。テーブルは事前に作っておくこと)
 sqlStr2 = "テーブルB"
 ' 改行コードの指定
 'Excelで作ったデータの場合は Chr(10) のみにするなど適宜変更必要
 splitStr = Chr(13) + Chr(10)
 
 ' データ削除実行(確認メッセージがウザイ場合はSetWarnings コメントをはずす)
 ' DoCmd.SetWarnings False
 DoCmd.RunSQL "DELETE FROM " + sqlStr2
 ' DoCmd.SetWarnings True
 
 ' レコードセット準備
 Set db = CurrentDb
 Set rs1 = db.OpenRecordset(sqlStr1, dbOpenForwardOnly)
 Set rs2 = db.OpenRecordset(sqlStr2, dbOpenTable)
 
 ' 分割と書き込みの作業
 Do Until rs1.EOF
 splitArray = Split(rs1!商品, splitStr)
 splitArrayUbound = UBound(splitArray)
 d = ""
 For i = 0 To splitArrayUbound
 If splitArray(i) = "-----" Or splitArray(i) = "*****" Then
 rs2.AddNew
 rs2!受注番号 = rs1!受注番号
 rs2!商品 = d
 rs2.Update
 d = ""
 ElseIf d = "" Then
 d = splitArray(i)
 Else
 d = d + Chr(13) + Chr(10) + splitArray(i)
 End If
 Next i
 rs1.MoveNext
 Loop
 
 ' 変数開放(自動的に開放してくれるのだがVB系では必須と思っておいたほうが無難)
 rs2.Close: Set rs2 = Nothing
 rs1.Close: Set rs1 = Nothing
 db.Close: Set db = Nothing

 ' 完了報告(メッセージがウザイ場合はコメント化あるいは消す)
 MsgBox ("完了")
End Sub
◎質問者からの返答

ありがとうございました。

上記のテーブルを作って試してみたのですが

完了してもテーブルBが空のままです。

分岐のところで、すべてElseにいってしまっているようです。

また、splitArray(i) =インデックスが有効範囲にありません

と出てくるときがあるのですが、関係あるでしょうか。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ