• ベストアンサー

改行ごとにフィールド分ける AC2010 VBA

ありがとう。 Eメールから、インポートしたフィールド「内容」に From: gosh Sent: Tuesday, September 09, 2014 12:29 AM To: Mits ご職業:2人 都道府県:京都府 市区郡(町/村):宇治市 といった、改行のあるテキストデータコロン : と:が混在が入ってます。 これを、 同じレコードで、コロンの前をフィールド名(既定)でコロンのあとが値の フィールド「To」に値 Mits フィールド「From」に値 gosh ... フィールド「市区郡(町/村)」に値 宇治市 という具合にするにはどのような方法があるでしょうか?

質問者が選んだベストアンサー

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

No1です。 コードの途中で、 For j = 1 To rs.Fields.Count - 1 となっていますが、 For j = 0 To rs.Fields.Count - 1 としてください。

mituhisa
質問者

お礼

piroin654さん、完璧に思っていたことができました。質問してよかったです。拝見して、自分のできる範囲を大幅に超えていました。教えていただいたコードをまず勉強します。本当にありがとうございました。感謝。

その他の回答 (1)

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

テーブル名を「テーブル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