[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『同一フォルダ内のLogファイルをシートを分けて読み込みたい』(よん)
同一フォルダ内にある複数のLogファイルを1つのEXCELファイルにシートを分けて纏めたい。
以下でできましたが、Logファイルを「:」区切りで列を分け、読み込むことはできないでしょうか?
logファイルは「:」を分岐に左右で分かれており 左に内容、右に数値が書かれてます。
Sub 複数ファイルを一つブックにまとめる()
On Error GoTo ErrorHandler Dim strPath As String Dim strBookName As String Dim TargetBook As Workbook Dim OriginalSheet As Worksheet '同一フォルダ内にあるlogファイルをシートに追加する strPath = ThisWorkbook.Path '自分自身と同じ場所とする strBookName = Dir(strPath & "\*.log") 'ファイル名取得 '対象ファイルが存在する限り処理 Do While strBookName <> "" If ThisWorkbook.Name <> strBookName Then '自分自身じゃないなら 'そのブックを開く Set TargetBook = Workbooks.Open(strPath & "\" & strBookName)
'ここで「:」区切りで列を分けてLOGファイルを読み込みたい※※※※※※※※※
'開いたブックの全てのシートを処理 For Each OriginalSheet In TargetBook.Worksheets '開いたブックのシートを自身の最後にコピー OriginalSheet.Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) 'コピーしたシートの名前をコピー元ブック名&シート名に変更 'ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count).Name = TargetBook.Name & OriginalSheet.Name 'コピーしたシートの名前をコピー元シート名に変更 ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count).Name = OriginalSheet.Name Next '開いたブックを閉じる TargetBook.Close Set TargetBook = Nothing End If strBookName = Dir '次のファイル Loop Exit Sub ErrorHandler: 'エラーが起きたら If Not (TargetBook Is Nothing) Then TargetBook.Close End If If Err Then MsgBox Err.Number & ":" & Err.Description, vbExclamation Err.Clear End If
Worksheets("まとめ").Select
End Sub
< 使用 アプリ:Excel2010、使用 OS:Windows7 >
(γ) 2016/02/22(月) 21:48
以下を変えればうまくいくと思ってましたが試行錯誤しながらやってみます Set TargetBook = Workbooks.Open(strPath & "\" & strBookName) (よん) 2016/02/22(月) 23:29
To よん さん
同じフォルダ内に、次の3つを置いて、(1)のマクロ実行ブックを実行してください。 (1)マクロ実行ブック(Module1に次のコードを記述) (2)集約シート.xlsx(※「sheet1」あり) ※ログファイルのファイル名(.logを除いた名前)でなければ、シート名は何でもOK (3)ログ1.Log
データ形式 (ログ1.Log)→「:」区切り文字 +++++++++++++++++++++++++++++++++ あいうえお:かきくけこ さしすせそ:たちつてと +++++++++++++++++++++++++++++++++
とりあえず、ログファイル1つを処理するプログラムです。 プログラムの修正→複数のログファイルのファイル名取得と、コピー処理のループ化。 (*〜*間の修正になるかと思います。)
Option Explicit Sub Sample() Const DBook As String = "集約シート.xlsx" 'Destination_Book【コピー先】 Const SFile1 As String = "ログ1.log" 'Source_File【コピー元】
Dim SN As String 'Source_Sheet_Name Dim xd As Variant 'destination Dim logPath As Variant, wb As Workbook, flag As Boolean Dim sh As Worksheet, cnt As Long xd = ThisWorkbook.Path & "\" & DBook logPath = ThisWorkbook.Path & "\" & SFile1
'【コピー先】を開く For Each wb In Workbooks If wb.Name = DBook Then flag = True '開いているか判定 Next '存在していて、開いてなければ開く If Dir(xd) <> "" And flag = False Then Workbooks.Open xd '---------------------------------------------------------------------- '************************************************************************************ '【コピー元】を開く flag = False For Each wb In Workbooks If wb.Name = SFile1 Then flag = True Next If Dir(xd) <> "" And flag = False Then Workbooks.Open logPath SN = ActiveSheet.Name '「シート名:ログ1」 '---------------------------------------------------------------------- With Sheets(SN) .UsedRange.TextToColumns Other:=True, OtherChar:=":" '「:」区切り文字 For Each sh In Workbooks(DBook).Sheets cnt = Workbooks(DBook).Sheets.Count If sh.Name = SN And cnt >= 2 Then Application.DisplayAlerts = False sh.Delete '「シート名:ログ1」が存在していたら削除 Application.DisplayAlerts = True End If
Next .Copy After:=Workbooks(DBook). _ Sheets(Workbooks(DBook).Sheets.Count) 'コピー Workbooks(SFile1).Close SaveChanges:=False '閉じる(保存しない)★ End With '---------------------------------------------------------------------- '************************************************************************************ Application.DisplayAlerts = False Workbooks(DBook).Close SaveChanges:=True '閉じる(保存する)★ Application.DisplayAlerts = True End Sub
(マリオ) 2016/02/23(火) 11:15
■要点 ログ1.logを開く Workbooks.Open logPath
ログ1.logのテキストデータが、アクティブシートに貼りつく。アクティブシートの名前を取得。 SN = ActiveSheet.Name
アクティブシートで、区切り処理をする(区切り文字は、「:」) Sheets(SN).UsedRange.TextToColumns Other:=True, OtherChar:=":"
区切り処理をしたデータをコピーして、コピー先(DBook)に Sheets(SN).Copy After:=Workbooks(DBook). Sheets(Workbooks(DBook).Sheets.Count) (マリオ) 2016/02/23(火) 11:30
SN「シート名:ログ1」があるブックを特定しておく (修正前)With Sheets(SN) (修正後)With Workbooks(SFile1).Sheets(SN) (マリオ) 2016/02/23(火) 12:24
'マクロ実行ブックと同じフォルダ内にある複数のLogファイルのデータを、 'アクティブブックに、シート分けして取り込んでいく。 '取込終了後、アクティブブックを「yymmdd_HHmmss.xlsx」の名前で保存して閉じる(マクロ実行ブックと同じフォルダ)。
Option Explicit Sub Sample3() Dim SaveFile As String Dim DBook As String Dim SN As String, xs As Variant Dim wb As Workbook, flag As Boolean Dim sh As Worksheet, cnt As Long Dim Path As String, buf As String, i As Long, j As Long, rv As Integer ReDim Book(1 To 1) As String Path = ThisWorkbook.Path & "\": buf = Dir(Path & "*.log") Do While buf <> "" i = i + 1: ReDim Preserve Book(1 To i): Book(i) = buf: buf = Dir() Loop Workbooks.Add '新規ブック作成 DBook = ActiveWorkbook.Name rv = MsgBox("Logファイル:(" & i & "個)" & vbCrLf & _ "処理を行いますか?", vbYesNo + vbQuestion, "確認") If rv = vbNo Then Workbooks(DBook).Close End End If With Application .ScreenUpdating = False .Calculation = xlCalculationManual .EnableEvents = False End With '************************************************************************************ For j = 1 To i flag = False For Each wb In Workbooks If wb.Name = Book(j) Then flag = True Next xs = ThisWorkbook.Path & "\" & Book(j) 'source If Dir(xs) <> "" And flag = False Then Workbooks.Open xs '開く(コピー元) SN = ActiveSheet.Name 'Source_Sheet_Name
With Workbooks(Book(j)).Sheets(SN) .UsedRange.TextToColumns Other:=True, OtherChar:=":" '「:」区切り文字 .UsedRange.EntireColumn.AutoFit '幅自動調整
For Each sh In Workbooks(DBook).Sheets cnt = Workbooks(DBook).Sheets.Count If sh.Name = SN And cnt >= 2 Then 'シート名(SN)が既にあるなら Application.DisplayAlerts = False sh.Delete '削除 Application.DisplayAlerts = True End If Next .Copy After:=Workbooks(DBook).Sheets(Workbooks(DBook).Sheets.Count) 'コピー Workbooks(Book(j)).Close SaveChanges:=False '保存せず、閉じる Application.ScreenUpdating = True DoEvents Workbooks(DBook).Activate Application.StatusBar = "処理実行中....(現在 " & j & "件)" Application.ScreenUpdating = False End With Next j '************************************************************************************ With Application .ScreenUpdating = True .Calculation = xlCalculationAutomatic .EnableEvents = True .StatusBar = False End With '終了処理------------------- For Each sh In Workbooks(DBook).Sheets cnt = Workbooks(DBook).Sheets.Count If sh.Name = "Sheet1" And cnt >= 2 Then 'シート名(Sheet1)があるなら Application.DisplayAlerts = False sh.Delete '削除 Application.DisplayAlerts = True End If Next Workbooks(DBook).Activate SaveFile = Format(Date, "yymmdd") & "_" & Format(Now(), "HHmmss") MsgBox "処理が終わりました。" & vbCrLf & _ "「" & DBook & "」を次の名前で保存後、閉じます。" & vbCrLf & _ "「" & SaveFile & ".xlsx」" Application.DisplayAlerts = False Workbooks(DBook).SaveAs ThisWorkbook.Path & "\" & SaveFile '★上書き確認せず保存 Workbooks(SaveFile).Close 'ThisWorkbook.Save 'If Workbooks.Count <= 1 Then Application.Quit 'ThisWorkbook.Close Application.DisplayAlerts = True End Sub (マリオ) 2016/02/23(火) 15:58
Sample3プロシージャをアップした後ではありますが、
Sampleプロシージャ、間違ってました。 Dir(xd)→Dir(logPath) (訂正前)If Dir(xd) <> "" And flag = False Then Workbooks.Open logPath (訂正後)If Dir(logPath) <> "" And flag = False Then Workbooks.Open logPath
(マリオ) 2016/02/23(火) 16:06
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.