Excel 파일을 함께 csv로 변환하고 싶습니다!

9830 단어 VBAExcelCSV

Excel 시트를 csv 파일로 출력합니다.



・대량의 시트를 포함한 Excel 파일을 대량으로 csv로 해야 한다!
 
...이 되었을 때 자동으로 처리 할 수있는 VBA 코드를 작성해 보았습니다.

사용한 것은 Excel2016입니다. Office365의 Excel에서도 동작 확인되었습니다.

실현하는 요건은 다음과 같이.

1. 폴더의 모든 .xlsx 파일에 대해 처리합니다.
2. .xlsx 파일의 모든 시트 (숨겨진 시트 포함)를 "시트 이름".csv라는 이름으로 출력합니다.
3. csv의 문자 코드는 UTF-8.

써 보면 다음과 같이 되었습니다.
Sub exceltoCSVutf8()

    Dim myfilepath As String
    Dim myfilename As String

    myfilepath = ActiveWorkbook.Path

    myfilename = Dir(myfilepath & "\" & "*.xlsx")
    Do Until myfilename = ""           'フォルダ内のExcelファイルについて処理

        Workbooks.Open myfilepath & "\" & myfilename

        Dim k As Long

        For k = 1 To ActiveWorkbook.Worksheets.Count

            Dim ws As Worksheet
            Set ws = ActiveWorkbook.Worksheets(k)

            Dim csvfile As String
            csvfile = ActiveWorkbook.Path & "\" & ActiveWorkbook.Worksheets(k).Name & ".csv"  'csvファイル名を定義


            Dim adoSt As Object                          'ADODB.Streamオブジェクトを生成
            Set adoSt = CreateObject("ADODB.Stream")

            Dim obob As String
            Dim i As Long, j As Long
            i = 1

            With adoSt
                .Charset = "UTF-8"
                .LineSeparator = adCRLF
                .Open

                Do While ws.Cells(i, 1).Value <> ""

                    obob = ""

                    j = 1
                    Do While ws.Cells(i, j + 1).Value <> ""

                        obob = obob & ws.Cells(i, j).Value & ","
                        j = j + 1

                    Loop

                    obob = obob & ws.Cells(i, j).Value

                    .WriteText obob, adWriteLine

                    i = i + 1    'ExcelのセルA1から順番に取得、1行目が終わったら2行目へ...

                Loop

                .SaveToFile csvfile, adSaveCreateOverWrite
                .Close

            End With

        Next

        ActiveWorkbook.Close
        myfilename = Dir()

    Loop

    MsgBox "究極のCSVを堪能した"

End Sub

표준 출력 기능으로 출력하면 문자 코드가 Shift-JIS로 고정되어 버렸습니다.
.Charset에서 "UTF-8"을 지정하면 요유! !

...라고 생각했는데, 생각하지 않는 벽에 부딪쳤습니다. (오류가 나오고 움직이지 않습니다)

이 문제는 "ADODB.stream"이라는 개체를 사용하여 해결되었습니다.
우선 ADODB 오브젝트에 데이터를 흘려 넣고, 그 후 CSV에 출력한다고 하는 흐름입니다.

필요한 설정



ADODB.stream을 사용하려면 Visual Basic 참조 설정을 조정해야합니다!

Visual basic → 툴 → 참조 설정으로 진행,
    
Microsoft Active X Data Objects 6.1 Library

을 켭니다. 이 설정을 하지 않으면 실행할 수 없습니다.

참고



이 기사를 쓰는 사람은 IT에 희소한 초보자입니다.
비슷한 처지로 공유할 수 있는 것은 공유하고 싶다! 라고 하는 생각을 담아 이하에 도움이 되는(일 것이다) 것을 써 둡니다.

・폴더내의 Excel 파일 모두에 같은 처리를 하고 싶을 때
Dim myfilepath As String
Dim myfilename As String

myfilepath = ActiveWorkbook.Path

myfilename = Dir(myfilepath & "\" & "*.xlsx")
Do Until myfilename = ""                        'フォルダ内のExcelファイルについて処理

    Workbooks.Open myfilepath & "\" & myfilename

    '(ここに処理を記述)

Loop

이렇게 쓰면, 차례차례로 폴더내의 Excel 파일을 취득해, 활성인 북으로서 취급해 줍니다.

(그 밖에도 추기 예정)

장문이 되어 버렸습니다만, 뭔가의 참고가 되면 다행입니다.

ADODB.stream에 사용할 수 있는 기능 등은 아래와 같은 페이지를 참조했습니다.

좋은 웹페이지 즐겨찾기