Excel 파일을 함께 csv로 변환하고 싶습니다!
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에 사용할 수 있는 기능 등은 아래와 같은 페이지를 참조했습니다.
Reference
이 문제에 관하여(Excel 파일을 함께 csv로 변환하고 싶습니다!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/atamaokasan/items/687feedead0ec2426964
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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
Dim myfilepath As String
Dim myfilename As String
myfilepath = ActiveWorkbook.Path
myfilename = Dir(myfilepath & "\" & "*.xlsx")
Do Until myfilename = "" 'フォルダ内のExcelファイルについて処理
Workbooks.Open myfilepath & "\" & myfilename
'(ここに処理を記述)
Loop
Reference
이 문제에 관하여(Excel 파일을 함께 csv로 변환하고 싶습니다!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/atamaokasan/items/687feedead0ec2426964텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)