特定フォルダ内のエクセルファイルを読込、対象シートの内容をCSVに出力する | 備忘録 (。・_・。)ノ
Option Explicit
Dim strFolder As String
Dim strThisBook As String
Dim strExtension As String
Dim strBook As String
Dim strSheet As String
Dim intRowSta As Integer
Dim intRowEnd As Integer
Dim intColSta As Integer
Dim intColEnd As Integer

Sub main()
    strThisBook = ThisWorkbook.Name                         '開いているブック
    strFolder = Cells(1, 2).Value                           'フォルダパス退避
    strExtension = Cells(2, 2).Value                        '拡張子退避
    If Dir(strFolder, vbDirectory) = "" Then                'フォルダの存在確認
        MsgBox "指定のフォルダは存在しません。"
        Exit Sub
    End If
    Call FileSearch(strFolder)                              '指定フォルダ検索
    MsgBox "END"
End Sub

'フォルダ内を指定拡張子分を取得
Sub FileSearch(strPath As String)
    strBook = Dir(strPath & "\*." & strExtension, vbNormal) '拡張子指定
    Do While Trim(strBook) <> ""                            'ファイルが見つからなくなるまで繰り返す
        Call xlsOpenClose                                   'ファイルオープン
        strBook = Dir()                                     '次のファイル名を取得
    Loop
End Sub

'エクセルファイルをオープン&クローズ
Sub xlsOpenClose()
    Dim objSheet As Object
    Workbooks.Open Filename:=strFolder & "\" & strBook      'エクセルオープン
    Debug.Print strFolder & "\" & strBook
    Application.ScreenUpdating = False                      '画面更新停止
    For Each objSheet In ActiveWorkbook.Sheets              'シート検索
        Worksheets(objSheet.Name).Activate
        strSheet = objSheet.Name
        Select Case strBook
            Case "test1.xls"                                '各ブックの指定
                Select Case strSheet
                    Case "Sheet1"
                        intRowSta = 4                       '各シートの開始行指定
                        intColSta = 2                       '各シートの開始列指定
                        getLastRowCol                       '各シートの最終行列取得
                        Call outCsv
                    Case Else
                End Select
            Case "test2.xls"
                Select Case strSheet
                    Case "Sheet1"
                        intRowSta = 5
                        intColSta = 3
                        getLastRowCol
                        Call outCsv
                    Case "Sheet3"
                        intRowSta = 2
                        intColSta = 2
                        getLastRowCol
                        Call outCsv
                    Case Else
                End Select
            Case Else
        End Select
    Next objSheet
    Application.ScreenUpdating = True                       '画面更新開始
    Workbooks(strBook).Close SaveChanges:=False             'エクセルクローズ
End Sub

'CSVファイル出力
Sub outCsv()
    Dim i As Integer
    Dim j As Integer
    Dim strCsvFileName As String
    strCsvFileName = strFolder & "\" & Format(Date, "yymmdd") & "-" & getBaseFileNmae(strBook) & "-" & strSheet & ".csv"    'CSVファイルをセット
    Open strCsvFileName For Output Access Write As #1                                                                       'CSVファイルのオープン
    For i = intRowSta To intRowEnd                                                                                          'CSVファイル出力
        For j = intColSta To intColEnd - 1
            If j = intColSta Then                                                                                           '先頭カラム
                Write #1, String(7 - Len(Cells(i, j).Value), "0") & Cells(i, j).Value;                                      'ゼロ埋め
            Else
                Write #1, Cells(i, j).Value;
            End If
        Next j
        Write #1, Cells(i, j).Value
    Next i
    Close #1                                                                                                                'CSVファイルのクローズ
End Sub

'最終行列の取得
Sub getLastRowCol()
    With Range("A1").SpecialCells(xlLastCell)
        intRowEnd = .Row    '入力最終行
        intColEnd = .Column '入力最終列
    End With
End Sub

'ファイル名称を取得(拡張子分離)
Function getBaseFileNmae(strParm As String) As String
    Dim objFileSys As Object
    Dim strExt As String
    Set objFileSys = CreateObject("Scripting.FileSystemObject")
    getBaseFileNmae = ""
    strExt = objFileSys.GetExtensionName(strParm)                       '拡張子抽出
    Debug.Print strExt
    getBaseFileNmae = Left(strParm, Len(strParm) - (Len(strExt) + 1))   '拡張子外抽出
    Debug.Print getBaseFileNmae
    Set objFileSys = Nothing
End Function