- ベストアンサー
改行ごとにフィールド分ける AC2010 VBA
ありがとう。 Eメールから、インポートしたフィールド「内容」に From: gosh Sent: Tuesday, September 09, 2014 12:29 AM To: Mits ご職業:2人 都道府県:京都府 市区郡(町/村):宇治市 といった、改行のあるテキストデータコロン : と:が混在が入ってます。 これを、 同じレコードで、コロンの前をフィールド名(既定)でコロンのあとが値の フィールド「To」に値 Mits フィールド「From」に値 gosh ... フィールド「市区郡(町/村)」に値 宇治市 という具合にするにはどのような方法があるでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
No1です。 コードの途中で、 For j = 1 To rs.Fields.Count - 1 となっていますが、 For j = 0 To rs.Fields.Count - 1 としてください。
その他の回答 (1)
- piroin654
- ベストアンサー率75% (692/917)
テーブル名を「テーブル1」とします。 以下のコードを標準モジュールに貼り付け イミディエイトウィンドウで実行するか、 あるいはtestの中身をフォームなどの ボタンクリックのイベントで実行してみてください。 なお、DAOを使用しているのでコード表の参照設定 から、DAOにチェックが入っているか確認してください。 また、コードの中で '先頭の余白を削除 If Left(strPart, 1) = " " Then strPart = LTrim(strPart) End If がありますが、質問のデータを元にすると テーブルに収めたときに先頭に余白が できるので、削除するコードをいれました。 必要がなければこの部分を削除するか コメントアウトしてください。 Sub test() Dim db As DAO.Database Dim rs As DAO.Recordset Dim strVar As Variant Dim strPart As String Dim strField As String Dim i As Long Dim j As Long Set db = CurrentDb Set rs = db.OpenRecordset("テーブル1", dbOpenDynaset) rs.MoveFirst Do Until rs.EOF strVar = Split(rs!内容, vbCrLf) For i = 0 To UBound(strVar) If InStr(strVar(i), ":") > 0 Then '":"より右の文字列 strPart = Right(strVar(i), Len(strVar(i)) - InStr(strVar(i), ":")) '先頭の余白を削除 If Left(strPart, 1) = " " Then strPart = LTrim(strPart) End If '":"より左の文字列 strField = Left(strVar(i), InStr(strVar(i), ":") - 1) 'フィールドの名前と一致したら一致したフィールドに書き込み For j = 1 To rs.Fields.Count - 1 If rs.Fields(j).Name = strField Then rs.Edit rs.Fields(j) = strPart rs.Update End If Next j End If Next i rs.MoveNext Loop rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub
お礼
piroin654さん、完璧に思っていたことができました。質問してよかったです。拝見して、自分のできる範囲を大幅に超えていました。教えていただいたコードをまず勉強します。本当にありがとうございました。感謝。