vba 다중 CSV 파일 읽기, EXCEL 형식으로 출력 샘플
4964 단어 VBA
Option Explicit
Dim outSheet As Worksheet
Dim inputFileFolder As String
Dim path As String
Dim fileExFlg As Boolean
'実行ボタンクリック
Private Sub btn_Generate_Click()
If Len(Sheet1.inputFileFolder.Text) = 0 Then
Call MsgBox("入力フォルダを入力してください。", vbOKOnly + vbCritical)
Exit Sub
End If
Call mainPross(Sheet1.inputFileFolder.Text)
End Sub
' 選択ボタンクリック
Public Sub selectButton_Click()
Application.FileDialog(msoFileDialogFolderPicker).InitialFileName = Sheet1.inputFileFolder.Text
If Not Application.FileDialog(msoFileDialogFolderPicker).Show Then
Exit Sub
End If
Sheet1.inputFileFolder = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)
End Sub
Public Sub mainPross(inputFileFolder As String)
Windows.Application.ScreenUpdating = False
Call ExecEachFolder(inputFileFolder, "**")
End Sub
'入力ディレクトリ再帰して、全部ファイルを繰り返す。
Public Function ExecEachFolder(folderPath As String, kaku As String)
Dim targetWorkbook As Workbook
Dim FSO As New FileSystemObject
Dim fe As FILE
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.ScreenUpdating = False
'check CSV path
checkPach folderPath
'check format file1 path
File_DirSample Sheet1.TextBox1.Value
'check format file2 path
File_DirSample Sheet1.TextBox2.Value
'check output path
checkPach Sheet1.TextBox3.Value
'フォーマットファイルを開く
Set targetWorkbook = Workbooks.Open(Sheet1.TextBox1.Value)
Set targetWorkbook = Workbooks.Open(Sheet1.TextBox2.Value)
' フォルダ内のCSVファイルを処理する
For Each fe In FSO.GetFolder(folderPath).Files
Dim folderNm As String
folderNm = Split(folderPath, "\")(UBound(Split(folderPath, "\")))
Dim fp As String: fp = fe.path
Dim en As String: en = LCase(FSO.GetExtensionName(fp))
If en = "csv" Then
'ファイル存在の場合、ファイルをOPENして、処理を行う
doBlogic fe.path
ElseIf en = "xlsx" Then
End If
Set fe = Nothing
Next
' サブフォルダに再帰的に検索する
Dim fr As Folder
For Each fr In FSO.GetFolder(folderPath).SubFolders
Call ExecEachFolder(fr.path, kaku)
Set fr = Nothing
Next
Set FSO = Nothing
Windows("f1.xlsx").Activate
ActiveWorkbook.SaveAs Filename:=Sheet1.TextBox3.Value & "/" & Replace(Replace(Replace(Now, "/", ""), ":", ""), " ", "") & "f1.xlsx"
ActiveWindow.Visible = True
Application.ScreenUpdating = True
ActiveWorkbook.Save
ActiveWorkbook.Close
Windows("f2.xlsx").Activate
ActiveWorkbook.SaveAs Filename:=Sheet1.TextBox3.Value & "/" & Replace(Replace(Replace(Now, "/", ""), ":", ""), " ", "") & "f2.xlsx"
ActiveWindow.Visible = True
Application.ScreenUpdating = True
ActiveWorkbook.Save
ActiveWorkbook.Close
a1: Exit Function
End Function
'ファイルをOPENして、自分の業務処理ロジックを書く
Public Function doBlogic(filepath As String)
On Error GoTo 1
'TODO TextBox1の値をチェック必要
'ファイル開く場合、非表示
'CSVファイルの名前を取得する
Dim pos As String
Dim pathName As String
Dim filename1 As String
pos = InStrRev(filepath, "\")
pathName = Left(filepath, pos)
filename1 = Mid(filepath, pos + 1)
'CSVファイルよみ、EXCELファイルに書く
Dim buf As String
Open filepath For Input As #1
Do Until EOF(1)
Line Input #1, buf
'読み込んだデータをセルに代入する
Dim tmp As Variant
Dim n As Integer
tmp = Split(buf, ",")
n = n + 1
If filename1 = "c1.csv" Then
Windows("f1.xlsx").Activate
Dim i As Integer
For i = 0 To UBound(tmp)
Cells(n, i + 1) = tmp(i)
Next i
ElseIf filename1 = "c2.csv" Then
Windows("f2.xlsx").Activate
For i = 0 To UBound(tmp)
Cells(n + 1, i + 1) = tmp(i)
Next i
ElseIf filename1 = "c3.csv" Then
Windows("f1.xlsx").Activate
For i = 0 To UBound(tmp)
Cells(n + 2, i + 1) = tmp(i)
Next i
Windows("f2.xlsx").Activate
For i = 0 To UBound(tmp)
Cells(n + 3, i + 1) = tmp(i)
Next i
End If
Loop
Close #1
1:
End Function
'checp path
Sub checkPach(filepath As String)
''Subフォルダが存在するかどうか調べます
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FolderExists(filepath) Then
Else
MsgBox filepath & "フォルダは存在しません"
End
End If
Set FSO = Nothing
End Sub
'check DIR
Sub File_DirSample(filepath As String)
Dim flSample As String
'ファイル名の取得
flSample = Dir(filepath)
'ファイルの存在有無を判定
If Len(flSample) <> 0 Then
Else
'「無し」の結果をメッセージボックスで表示
MsgBox (filepath & "は存在しません"), vbCritical
End
End If
End Sub
Reference
이 문제에 관하여(vba 다중 CSV 파일 읽기, EXCEL 형식으로 출력 샘플), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/syict001/items/c0d3bf0f1ba47516f161텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)