エクセルに不規則なメール内容を抽出する方法

このQ&Aのポイント
  • エクセルに不規則なフォーマットのメール内容を抽出する方法について教えてください。
  • 現在はポータルサイト経由で来たメールの内容を手作業でエクセルに転記しており、VBAを使って自動化したいと考えています。
  • 最近加入したポータル経由の問い合わせメールは項目と行数がバラバラなため、自動化する方法がわかりません。どなたか良い方法を教えてください。
回答を見る
  • ベストアンサー

不規則なフォーマットのメール内容をエクセルに抽出したいのですが、どなた

不規則なフォーマットのメール内容をエクセルに抽出したいのですが、どなたかお教えいただけませんでしょうか。 小さな会社でメール問い合わせの受付をしています。 現在はポータルサイト経由で来たメールの内容をエクセルの表に転記しているのですが、 以前から使っていたポータルからのメールはフォーマットが決まっているため、メール本文から必要なところをコピーし、決まったセルにそのまま貼り付け、MID関数やLENを使って名前や住所など、必要な情報を別の場所に抜き出し、それを自動マクロを駆使して別のワークシートにある表にコピーする方法で何とか自動化することができていました。 ところが、最近加入したポータル経由の問い合わせメールは、項目の上から順に入力のあったところだけが表示されていて行数がバラバラなので、上記の方法が使えません。 例1) 問い合わせ番号:0000001 お名前:○山○子 メールアドレス:aaa@aaa.com 詳しい内容:掲載の商品について教えて欲しいのですが 一番気になるのは写真が掲載されているもので、2番目 に気になるのは価格が一番安いものです。 どの商品が一番人気か教えてもらえませんか? ご希望の連絡方法:メール 年代・性別:30代女性 例2) 問い合わせ番号:0000002 お名前:△原△雄 お電話番号:00000000000 FAX番号:0000000000 メールアドレス:bbb@bbb.co.jp 住所:大阪府*********** 詳しい内容:商品がすぐ欲しいので一度電話で連絡ください ご希望の連絡方法:電話 ご希望の商品:******** 年代・性別:40代男性 といった感じで、「問い合わせ番号」と「お名前」「詳しい内容」以外は 項目があったり無かったりして、行数も場所も定まりません。 さらに「詳しい内容」の欄は文字数が決まっていないため、 何行にもわたる場合があります。 現在は1項目ごとにコピぺでエクセルの表に転記しているのですが、とても大変なのと、ミスをしそうで怖いので、なんとかVBAを使ってエクセルへ取り込みたいのです。 しかしなにぶん自動マクロを駆使する程度のスキルのため、どうすればいいのかさっぱりわかりません。 どなたか良い方法をお教えいただけませんでしょうか。

  • 13-ya
  • お礼率20% (1/5)

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは セルの位置などの具体的な内容がほしかったのですが、位置関係が分からないので、以下のマクロを加工してくださるようにお願いします。パターンは、定型句を使っていることが条件ですから、それが違っているとヒットしません。また、こちらは、Goo 側から回答していますので、半角和字が使用できませんので、代用のワイルドカードの文字(.)を使っています。例えば、年代・性別の間の、中黒点は全角でも半角でもヒットするように作られています。 Sheet1 のA1 に貼り付けたものを、Sheet2 のA1 に別けて貼りつけます。 なお、「問い合わせ番号」は、0も取れていますが、貼付けの際に「数値」に変わってしまうので、0がなくなってしまいます。書式の文字列にしてください。それができないなら、マクロで処理します。 この文字列を取得するマクロは、慣れている人なら簡単ですが、いくつかのポイントの勉強が必要になります。 '------------------------------------------- Sub PickUpData()   Dim Patterns(8) As String   Dim Datas(8) As String   Dim Matches As Object   Dim c As Range   Dim i As Variant   Dim buf As String   Dim sh As Worksheet   Set sh = Worksheets("Sheet1")   'パターン群   Patterns(0) = "問い合わせ番号:(\d+)"   Patterns(1) = "お名前.(.+)$"   Patterns(2) = "詳しい内容.(.+)$"   Patterns(3) = "お電話番号.([\d\-]+)$"   Patterns(4) = "メールアドレス.(.+)$"   Patterns(5) = "住所.(.+)$"   Patterns(6) = "ご希望の連絡方法.(.+)$"   Patterns(7) = "ご希望の商品.(.+)$"   Patterns(8) = "年代.性別.(.+)$"   With CreateObject("VBScript.RegExp")     Application.ScreenUpdating = False     For i = 0 To UBound(Patterns)       .Pattern = Patterns(i)       .Global = False       For Each c In sh.Range("A1", sh.Range("A18"))         If c.Value <> "" Then           Set Matches = .Execute(c.Text)           If Matches.Count > 0 Then             If i = 2 Then             buf = Matches(0).SubMatches(0)             buf = buf & vbLf & CombineText(c)             Datas(i) = buf             Else             Datas(i) = Matches(0).SubMatches(0)             Exit For             End If           End If         End If       Next c     Next i     Application.ScreenUpdating = True   End With      '貼付け先   Worksheets("Sheet2").Range("A1").Resize(9).Value = Application.Transpose(Datas)   Set sh = Nothing End Sub Function CombineText(c As Range) Dim j As Long Dim buf As String With ActiveSheet  For j = 1 To Cells(c.Rows.Count, c.Column).End(xlUp).Row   buf = buf & vbLf & c.Offset(1).Text  Next j End With  CombineText = buf End Function

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 何も分からないままに読んでいると、まず、例 1)のようなスタイルが問題だとおっしゃっているのですか?例2)も問題だとおっしゃっているのですか?本来、こうあるべきだというフォーマット(書式)で、マクロを動かしているのが、マクロが働かないということなのでしょうか? 実際に、関数やマクロを見せていただいたほうが早いと思います。 実際に、自動化マクロにするためには、どのようにしてよいのか、こちらからでは分からないのです。ボータルから入ってきたデータを、次に、どのようにしていくのか分かりません。コピペと書いてあるのですが、ペースト側の貼り付けのシートやセルの位置などはどうなっているのでしょうか? >「問い合わせ番号」と「お名前」「詳しい内容」以外は >項目があったり無かったりして、行数も場所も定まりません。 どのようにしたらよいのか、肝心な点が分からないので、今のところは手が付けられません。ある程度VBAが分かる方なら、こういう場合は、配列変数にして、項目の受け皿を用意して、後は正規表現で、検索して代入すればよいだろうというアドバイスだけで済みますが、たぶん、それでは理解されないと思います。

13-ya
質問者

お礼

御礼が遅くなり申し訳ありません! こちらがあいまいな表現でお伝えしていたにもかかわらず、 完璧なコードを書いてくださり、ありがとうございます。 心から感謝しております!!! 本当に助かりました。どうもありがとうございました。 <(_ _*)> ))

13-ya
質問者

補足

ご回答ありがとうございます。 書き方がまずくてすみません。 >例1)のようなスタイルが問題だとおっしゃっているのですか? >例2)も問題だとおっしゃっているのですか? これはまず例1)と例2)が混在している事が問題と感じています。 従来から使っているものは、 氏名:**** メールアドレス:**** 電話番号:**** ・ ・ ・ 問い合わせ内容:**** という順番が固定しており、空白があっても項目数・・・つまり行数は変わらないので、 メール本文の必要な部分をコピーし、エクセルの決まったセルに貼り付けると、決まった行に決まった項目が入ります。 そこからMID関数などで「氏名:」「メールアドレス:」を省いたものを、別シートに作った一番上の列がタイトル行になっている、よくある一覧表の下にマクロで貼り付けています。 (問い合わせ内容はこちらも文字数不定ですが、一番下なので、そこだけ別にコピーをして特定のセルへ貼り付けています。) しかしその方法では決まった行に決まった項目が入らないと使えませんので、どうすればいいのか分からず、新しい方のメールはまだマクロを組んでおりません。 現在は従来のものとは別シートで、同じように一番上の列がタイトル行の表を作り、下に名前やメールアドレスなどの項目を一つずつ手作業で貼り付けています。 このような説明でお分かりいただけますでしょうか。 実はVBAも勉強しようと思って独学で取り組んではみたのですが、まず基礎すらあいまいな状態では配列がどうしても理解できないのと、エラー処理、繰り返し処理など、勉強しなければいけないことが山ほどあるようで挫折してしまい、ここに投稿させていただいたのです。時間をかけて学んで行くにしてもハードルが高すぎて、今実務で必要なものを作るには間に合わないのです。 どうかお助けくださいますようお願い致します。

関連するQ&A

  • メール内容を項目ごとに自動でエクセルに入力したい。

    もらったメールの内容を 項目ごとに自動でエクセルに入力する方法を探しています。 メール内容は定型フォームが決まっているので、 プログラム的に判断することは可能だと思っています。 定型フォームとは以下のようなメールのことです。 ==================================== ●お名前 藤井 ●住所 大阪府 ●電話番号 090-***-*** ●メールアドレス *****@****.*** ●備考 こんにちは・・・ ・・・・・したいと思います。 ・・・・・ (↑行数不定) ==================================== UWSCなどを使って自動化することも考えたのですが、 内容の行数が違ったりして、不都合が起きます。 プログラム知識に疎いのでできるだけ簡単な方法が知りたいです。 できれば、こういった類を自動化するフリーソフトがあればいいんですが。。。

  • メールの内容からEXCELへの変換はできますか?

    フリーのcgi(フォームメール)の機能を設定し、 受信したメールの内容をEXCELで保存するということはできますか? 例えば、名前・住所・電話番号という項目が記述されたメールを受信後、そのメールにある項目を EXCELで住所録のようにデータ管理のようなことはできるんでしょうか? 方法がありましたら教えてください。 WindowsXP、Outlook Express(ver6.0)、EXCEL2002です。

  • Excelで別ブックに内容を転記する方法

    Excelで別ブックに内容を転記する方法を教えていただきたいです。 あるワークブック(転記先・画像上)上にデータの一覧表を作成したいと考えています。 その一覧表には項目が複数ありますが、全てではなく一部の項目のみ、 別のワークブック(転記元・画像下)から内容をコピーした上で、 自動的に転記先の表の最下行に追加できるようにしたいと考えています。 転記元のワークブックは複数ありどの列にどの項目の内容が書いてあるか、は変わりませんが、 何行分の項目が入力されているか、は一定ではありません。 項目1の記入があれば同じ行の他の項目も全て記入されています。 ただし転記先に必要のない項目(画像のXYZなど)もあり、 表と項目の並びも転記先と転記元で異なっています。 マクロを用れば可能かと思い自分なりに調べては見たところ、 ActiveSheetの指定した列の1行目~最下行を選択 ThisSheetの指定した列の最下行に張り付け という流れを必要な項目分だけ繰り返せばいいのかと思いましたが、 実際にどのように式を組み合わせていけばいいのかが分かりませんでした。 説明も稚拙で分かりづらいかと思いますが、 ご回答いただけましたら幸いです。宜しくお願いいたします。

  • 届いたメールをエクセルに抽出したいです。

    お伺いしたいのですが、 メールで届いた内容を項目ごとにエクセルに抽出することは可能でしょうか。 ※ドメインは個人のものを使用しています。 ※メーラー「thunderbird」 【エクセルに抽出したい理由】 現在、イベントの申込みをメールで受けており、必要事項を記入してメールで頂いております。 必要事項は名前や連絡先、住所など数項目です。 いわゆる顧客情報の管理をしたいです。 【どうなると理想か】 メールが届くと自動的に必要項目がエクセルに抽出・蓄積されていくと助かります。 また、メールはGメールでも構わないですし、メーラーもoutlookなど他のものでも構いません。 エクセルもgoogleスプレッドシートでも構いません。 こういったことができるのかどうかご存知の方がいましたら、 ご教授いただけると大変助かります。 宜しくお願い致します。

  • エクセルにて、ある表を別の表に転記したい

    エクセルに係る質問です。 2種類のエクセル表(表1と表2)があります。2つの表とも、担当者ごとの売上高を取引先別、販売ルート別、商品別に記入するための表ですが、表1はマスターの表と呼ばれ、全担当者ごとの全ての取引先ごとの、全ての販売ルートごとの、全ての商品ごとに売上高を記入できるセルが設けられた表で、一方、表2は毎月ごとの実績表と呼ばれ、実際に売上があった商品のみにつき、その売上高がどの担当者のどの取引先のどの販売ルートのどの商品を販売することで発生したかが分かる表となっています。(つまり、売上があった商品しかセルが設けられていません) ここで質問ですが、表2の内容を表1に自動的に転記するような方法は何かないでしょうか? (会社には販売管理ソフトがパソコンに入っていて、各営業担当者は毎日の売上高をそこに入力しています。このソフトにより毎月の担当者ごとの売上高をエクセルで出力することができるのですが(これが表2ですが、表2は自動的に作成されます)、この表2の結果を表1に転記する必要があるのです。 表1に転記する目的は毎月の結果を半年毎、1年毎に累計するためです。  営業担当者は100名近くおり、この作業を手作業で行うことは非常に困難です。 何とか自動的にこの転記が出来る方法(エクセル上で自動転記が出来る関数があるか? または、別のオフィースアプリと連携して出来ないか? または、別途ソフトを購入して出来ないか? 等々色々な可能性を探しています。) エクセルに強い方がいらっしゃったら是非アドバイスをよろしくお願い致します。

  • フォームメールの内容をエクセルへ。

    カテゴリーが分からなかったので、こちらでカテゴリーでご質問させていただきます。 会社のHPでフォームメールで募集の受付のような事をしたいのですが、 以前まではフォームメールで受信。その後、内容をコピーしてエクセルに貼り付けて管理していましたが、エクセルにフォームメールの入力項目と同じものを作り、送信されると、自動的にエクセルに内容が落とし込めるような事は可能でしょうか? または、サーバ側にフォームメールから送信されたデータを一旦溜めておいて、ダウンロードすると自動的にエクセルに落とし込めるような事は出来ますでしょうか? もし、可能であれば、どのような仕組みになるのでしょうか。 また、参考になるものや、URLなどありましたら教えていただきたいと思います。 宜しくお願い致します。

  • メール添付の内容を別のEXCELに自動転記したい。

    1)VBAをこれから学ぶレベルですが、日々メールで送られてくるPDFまたはExcelの特定の内容(納期)を別のExcelに転記するのをVBAで自動化したいのですが、可能でしょうか。 (1)PDFの参照欄=英数字、EXCELの参照欄=日付(dd.yy.mm) (2)別のExcelは基幹ソフトから抽出(セルおよび列内に文字・数字が混じっている) (3)納期の変更が分かるように、特定の検査値の新しい列に10分毎、1日2回など定期的に転記されるようにする。また変更された日付を色別し、遅延は赤、前倒しは青とする。 2)メール添付のPDFの内容を読み取り、その内容の特定の名前のフォルダ(複数、増加する)に保存することもVBAで自動化したいと考えています。 説明内容が不十分の場合はご指摘ください。 すべて手作業には限界があるのて少しでも簡略化したいのですが、大変困っています。 初心者でもわかるようにご教示いただけたら幸いです。

  • メールの内容を自動的に振り分けるには。

    自分のHPにフォーマットがあって、名前、ニックネーム、メール等を記入し送ってもらったものを、今はひとつづつコピーペーストでエクセルに入力しています。もっと簡単な方法はないですか?自動的に項目ごとに振り分けられるとか、、、。

  • エクセル 印刷時の設定

    エクセル初心者ですみません。 会社でエクセルで表が送られてきたので印刷したいのですが、 行数が700番くらいまであって 最初の1~7行が項目になっています。(番号とか名前とか) 列は幅変更もありますが35列あります。 これをA3用紙に印刷したいのですが印刷プレビューで改ページ設定を行い、複数ページにわけ何とか印刷は出来たのですが 項目がなくわかりづらいので 2ページ目以降でも1~7行の項目を印刷するように設定は可能なのでしょうか? わかりづらい 内容で申し訳ありません。 よろしくお願いいたします

  • excelで複数行を一行に並び変える方法

    関数を駆使すれば出来ると思うのですが・・・わかりません・・・。質問させて下さい。 excelの表を、 10 30 40 50 60 70 80 20 40 10 40 40 40 98 76 56 78 69 34 68 87 53 67 53 56 76 78 65 87 23 12 56 45 32 87 87 87 87 65 25 25 46 27 46 98 98 98 65 45 90 65 46 76 87 の様になっているのを、 10 30 40 50 60 70 80 20 40 10 40 40 40 98 76 56 78 69… と一行に並べ変えたいのです。 行数が200行とありコピーペーストだと時間がかかるため何か良い方法無いでしょうか? ご指導宜しくお願いします。

専門家に質問してみよう