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.)