メールのtxtデータをexcelに表形式で取り込む方法

このQ&Aのポイント
  • メールのtxtデータをexcelに表形式で取り込むための方法を教えてください。
  • ThunderbirdとImportExportToolsを使用して、メールをtxtデータに変換し、excelに取り込む方法を教えてください。
  • 手作業で勤務データを移すのに時間がかかってしまうため、効率的な方法を教えてください。
回答を見る
  • ベストアンサー

一連のtxtからexcelに表形式で取り込みたい

メールをtxtデータにしたものをツールかマクロを使い下記のような表形式でexcelに取り込みたいです。 データの中身は勤務データです。 |件名 |送信者 |日付 |宛先 |本文 |山田 5/7|山田のアドレス |2013/5/8 8:03 |私のアドレス |9:00-18:00 |佐藤 5/7|佐藤のアドレス |2013/5/8 12:06|私のアドレス |9:30-20:00 |田中 5/8|田中のアドレス|2013/5/9 16:04|私のアドレス |9:00-12:00 午後休です。 (表示がずれていますが、お許しください) メーラーはThunderbirdでImportExportToolsを使い、100件程度のメールを一つのtxtファイルにしています。 txtの中身は以下のように同じような内容が繰り返し縦に記述されています。 ---------------------------------- Subject: 山田 5/7 From: 山田のアドレス Date: 2013/5/8 8:03 To: 私のアドレス 9:00-18:00 Subject: 佐藤 5/7 From: 佐藤のアドレス Date: 2013/5/8 12:06 To: 私のアドレス 9:30-20:00 …(以下省略) ---------------------------------- excelの標準取り込み機能ではすべて縦に転記されてしまい使い物になりません… 本文は2行以上(改行含む)の時もありますが、できれば一つのセルに収まるようにしたいです。 セルの中で改行されている分には構いません。 今まで手作業で勤務データを移していましたが、ミスがあるうえにそれだけで1日が終わってしまいます… これを可能にする方法を教えていただけないでしょうか? ツールでもマクロでも構いません。よろしくお願いします。

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

  • ベストアンサー
回答No.3

<<修正版>> '指定されたtxtファイルを読み、メール1件の先頭レコードのキー毎に、その間のレコードを1行のセルに展開する(縦から横へ位置変換してるだけ) '最初の"Subject: "が現れるまでのレコードはゴミ扱い(捨てる) '元ネタは、マクロブックと同じフォルダに入れる '結果は、アクティブシートに出る 'Constのところは環境に合わせて設定する必要がある Option Explicit Sub MailText2Sheet() Const xName = "隣の山田君.txt" 'ネタファイル Const xHead = "Subject: " 'メール1件の先頭レコードのキー Const xLabel = "件名|送信者|日付|宛先|本文" Dim xFF01 As Integer Dim xPath As String Dim xFileName As String Dim xExtent As String Dim xREC As Variant Dim xRange As Range Dim xRag As Boolean Dim kk As Long Dim nn As Long xPath = ThisWorkbook.Path & "\" xFileName = Dir(xPath & xName, vbNormal) If (xFileName <> Empty) Then With ThisWorkbook.ActiveSheet .UsedRange.ClearContents Cells(1, "A").Resize(, 5).Value = Split(xLabel, "|") With Cells(1, "A").Resize(, 5) .Font.Bold = True .Interior.ColorIndex = 36 End With nn = 1 xRag = True xFF01 = FreeFile() Open xFileName For Input As #xFF01 Do Until EOF(xFF01) Line Input #xFF01, xREC If (InStr(xREC, xHead)) Then nn = nn + 1 kk = 0 xRag = False Else End If If Not (xRag) Then kk = kk + 1 Cells(nn, kk).Value = xREC End If Loop Close 'キーワードを消す For Each xRange In .UsedRange xRange.Value = Replace(xRange.Value, xHead, "") Next .Columns("A:E").AutoFit End With Else MsgBox (xPath & xName & ":File not Found !!") End If End Sub

cosmo11
質問者

お礼

ご回答ありがとうございます。 修正版の再コメントも頂きありがとうございます。 無事に要件を満たした表を作ることができました! 一日中勤務データとにらめっこすることがなくなると思うと 非常に気が楽です。 助けて頂き本当にありがとうございました。

その他の回答 (2)

回答No.2

'Constのところは環境に合わせて設定する必要がある Option Explicit Sub MailText2Sheet() Const xName = "隣の山田.txt" Const xHead = "Subject: " Const xHeads = 1 Const xLabel = "件名|送信者|日付|宛先|本文" Dim FSO As Object Dim xFF01 As Integer Dim xPath As String Dim xFileName As Variant Dim xExtent As String Dim xREC As Variant Dim xRag As Boolean Dim kk As Long Dim nn As Long Application.ScreenUpdating = False xPath = ThisWorkbook.Path & "\" xFileName = Dir(xPath & xName, vbNormal) If (xFileName <> Empty) Then With ThisWorkbook.Worksheets(1) .UsedRange.ClearContents Cells(1, "A").Resize(, 5).Value = Split(xLabel, "|") With Cells(1, "A").Resize(, 5) .Font.Bold = True .Interior.ColorIndex = 36 End With nn = xHeads xRag = True Set FSO = CreateObject("Scripting.FileSystemObject") xFF01 = FreeFile() Open xFileName For Input As #xFF01 Do Until EOF(xFF01) Line Input #xFF01, xREC If (InStr(xREC, xHead)) Then nn = nn + 1 kk = 0 xRag = False Else End If If Not (xRag) Then kk = kk + 1 Cells(nn, kk).Value = xREC End If Loop Close Set FSO = Nothing End With Else MsgBox ("Open Error:" & xPath & xName), vbInformation End If Columns("A:E").AutoFit Application.ScreenUpdating = True End Sub

回答No.1

テキストファイルは、1行目から「データ行5、空白行1」で連続している前提です。 また、取り込み先Excelの1行目(タイトル)は手入力していただくとしまして―― 次のマクロを試してみてください。 ※5行目の " " 内は、テキストファイルの実際のフルパスに書き換えます。 Sub Test()  Dim FName As String, FF As Variant, Bun As String  Dim gyo As Long, rw As Long  Application.ScreenUpdating = False  FName = "C:\aaaa\bbbb\nnnn.txt"  '※  gyo = 1  'TEXTファイルの行  FF = FreeFile  rw = 2   'Excelの行カウンタ  Open FName For Input As #FF  Do Until EOF(FF)   Line Input #FF, Bun   Select Case gyo Mod (6)    Case Is = 1     Cells(rw, 1).Value = Replace(Bun, "Subject:", "")    Case Is = 2     Cells(rw, 2).Value = Replace(Bun, "From:", "")    Case Is = 3     Cells(rw, 3).Value = Replace(Bun, "Date:", "")    Case Is = 4     Cells(rw, 4).Value = Replace(Bun, "To:", "")    Case Is = 5     Cells(rw, 5).Value = Bun    Case Is = 0     rw = rw + 1   End Select   gyo = gyo + 1  Loop  Close #FF  Application.ScreenUpdating = True End Sub

cosmo11
質問者

お礼

ご回答ありがとうございます。 txtファイル内が定型ならうまくいくのですが、 勤務の報告を2行にわたって書いてくる人もいたりするので、 そうするとずれてしまいますね。 ちょっといじればできそうな気もしますが、 マクロ初心者の私には少し難しそうでした。 でも回答頂きありがとうございました。

関連するQ&A

  • excel 重複したデータのコピー

    例えばこんなデータがあるとします。 名前  値 鈴木  1 佐藤  2 佐藤  5 小林  2 田中  3 田中  1 田中  2 斉藤  0 山田  4 山田  2 というデータから 佐藤  2 佐藤  5 田中  3 田中  1 田中  2 山田  4 山田  2 という感じで名前が2つ以上あるデータだけ抽出・コピーをしたいのですが、 どういう風にすれば出来るでしょうか。

  • 複数のシートのセル内容をひとつにまとめたい

    複数のシートのセル内容をひとつにまとめたいと思っています。 Sheet1        Sheet2      Sheet3 1 山田 ¥100  1 山田 ¥80  3 鈴木 ¥80 2 佐藤 ¥130  2 佐藤 ¥55  4 田中 ¥150 3 鈴木 ¥110  4 田中 ¥60 こんなデータを Sheet4 1 山田 2 佐藤 3 鈴木 4 田中 とまとめたいんです。 金額は必要ないので、番号と名前だけをまとめたいんです。 どうすれば良いか、教えてください。 よろしくお願いします。

  • 【HELP!!】Excelから保存したtxtデータに「改行コード」を入れない方法(VBA)

    あるデータをExcelマクロを使って生成しています。 txtに保存するときに、120バイトで揃えたいのですが、データに改行コードが入る為120バイトを超えてしまうようです。 データは最大200行。 Excelのセルで生成されたデータはそのままに、改行コードのみをtxtの段階で削除する方法を教えてください! とっても困っています・・・ ちなみに・・・ ActiveWorkbook.SaveAs Filename:="C:\MIKAZUKI.txt", FileFormat:=xlUnicodeText _ , CreateBackup:=False が今のコードです。 不足な資料等があればジャンジャン送ります。

  • エクセルのデータで重複する名前のセルの色を黄色に変

    エクセルのデータで重複する名前のセルの色を黄色に変えたいんですがどうしたらいいですか? 鈴木イチロー 黄色 山田花子 黄色 田中三郎 鈴木イチロー 黄色 佐藤明菜 山田花子 黄色 このような感じに縦に並んでいるデータがあるんですが、この重複しているデータのセルの色を黄色に変えたいです よろしくお願いします!

  • リストの単語がテキストファイルで何回出てくるか

    「人の苗字+改行」がたくさん入力されているname.txtと 「苗字が登場する会話文」がたくさん入力されているconv.txtの 二つのファイルがあります。 【name.txt】 鈴木 田中 佐藤 ・・・ 【conv.txt】 昨日の山田さんの話によれば、明日は佐藤さんが担当だそうだ。 京都の中山君が来たときに荷物を届けてほしい。 ・・・ これらname.txtのそれぞれが、conv.txt全体で何回出てきたかを求めるprelのプログラムを作りたいのですが、どのようにしたら良いでしょうか。 アウトプットは 鈴木 256 田中 982 佐藤 157 ・・・ となるようにしたいと思っています。 皆さまのお知恵をお貸しくださいませ。

  • エクセルでのtxtデータ読み込みについて

    まずtxtデータの中身です。 20080702,0952,00001,158860031 20080702,0952,00001,158860031 20080702,0952,00001,158860031 20080702,0952,00001,158860031 20080702,0952,00001,158860031 20080702,0953,00001,158860031 20080702,0953,00001,156850100 20080702,0954,00001,452365524 20080704,1245,00001,452365524 ・ ・ ・ ・ みてもらうとわかるのですが、日付や時刻データが先頭に 並んでいる内容のtxtデータです。 カンマで区切られ、158860031の部分で1つのデータは終わりです。 ここで改行されて延々と続きます。 やりたいことは、txtファイルのデータをエクセルに取り込み、この最後の部分のカウントしたいということです。 この場合だと、エクセルにて158860031が6つという感じでカウント したいのですが、なんの機能を使えばいいのかわかりません。 どの機能を使ったらいいのかの部分がわからないので、 答えていただける方は「こういう機能がありますよ」 と指摘していただけるとありがたいです。 細かい内容については自分で調べることはできます。 できれば、いろんな方法を知りたいと思っています。 よろしくお願いします。。。

  • Excelでの樹形図

    Excelでの樹形図 あるチームにおける人の組み合わせは ex:6人チームの場合 6×5×4×3×2×1=720通り ですが それらの組み合わせを全て網羅する一覧を Excelで作る事は出来るの でしょうか? ex:セルA1=田中さん セルA2=田中さん、山田さん セルA3=田中さん、山田さん、佐藤さん…… ご教授、よろしくお願いいたします

  • エクセルで、次のような自動入力をしたい

      A    B    C    D   E  ・・ AA 1 田中 鈴木 佐藤          山田 2 鈴木 山田              海岡 3 田中 佐藤              佐藤 というような表があり、AAの列に名前を入力したとき、 D1に「山田」、C2「海岡」と、その行に関してAA列に新規の名前が入力されたときにD1,C2に自動入力することは、VBAで簡単にできますか? 3列目には「佐藤」さんがすでいるので入力不要です。 よろしくお願いします。(マクロ初心者です)

  • 【エクセル】縦に続いた表を横にして整理したい

    表題の通りですが、エクセル2003で、以下のようなことがしたいです。 [元データ]   A     B       1  氏名   田中 2  住所   東京 3  電話番号 *** 4  登録日  *** 5 6  氏名   鈴木 7  住所   埼玉 8  電話番号 *** 9  登録日  *** 10 11  氏名   佐藤 12  住所   埼玉 13  電話番号 *** 14  15 氏名   工藤 のように一人分のデータが、空白セル1マス空けて、延々と続いた様な表があります(3万行くらい)。 これを下記のように変更したいのです [整理後]   A    B    C    D    E 1 氏名   住所   電話番号  登録日 1 田中   東京   ***   *** 2 鈴木   埼玉   ***   *** 3 佐藤   埼玉   ***   (空白) 4 工藤    5 のような感じです。 3つ目の佐藤氏のデータのように元データに登録日という項目が無い場合があります。 それ以外の項目に関して順番や有無の違いはありません、1データの最終行にある登録日という 項目だけ有ったり無かったりします。 項目だけは縦のものを横に貼り付け、で出来たのですが、それが意外のデータを効率よく移すには どうしたら良いでしょうか。 関数、マクロを教えていただけたらありがたいです。こうしたら良いというアイデアだけでも助かります。どうか宜しくお願いします。 (説明不足のところがありましたらすいません…補足致します)

  • EXCEL 縦横ある顧客名から、重複をなくす方法を教えて下さい。

    下記の様なデータがあるとします。     1月度 高橋 佐藤 山田 2月度 佐藤 佐藤 山田 3月度 山田 高橋 高橋 4月度 山田 佐藤 高橋 ↓ これを結果、 高橋 佐藤 山田 と、重複をなくして、抽出させたいのです。 縦だけならば、フィルタオプションで出来たのですが、縦にも横にもたくさんデータがあるので、 方法に困っています。 良い方法を教えて下さい。

専門家に質問してみよう