• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:一連のtxtからexcelに表形式で取り込みたい)

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

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

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

  • ベストアンサー
回答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行にわたって書いてくる人もいたりするので、 そうするとずれてしまいますね。 ちょっといじればできそうな気もしますが、 マクロ初心者の私には少し難しそうでした。 でも回答頂きありがとうございました。