アプリ版:「スタンプのみでお礼する」機能のリリースについて

ありがとう。

Eメールから、インポートしたフィールド「内容」に

From: gosh
Sent: Tuesday, September 09, 2014 12:29 AM
To: Mits
ご職業:2人
都道府県:京都府
市区郡(町/村):宇治市

といった、改行のあるテキストデータコロン : と:が混在が入ってます。

これを、
同じレコードで、コロンの前をフィールド名(既定)でコロンのあとが値の

フィールド「To」に値 Mits
フィールド「From」に値 gosh
...
フィールド「市区郡(町/村)」に値 宇治市

という具合にするにはどのような方法があるでしょうか?

A 回答 (2件)

No1です。



コードの途中で、

For j = 1 To rs.Fields.Count - 1

となっていますが、

For j = 0 To rs.Fields.Count - 1

としてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/09/11 21:03

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

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