ExcelファイルをUTF-8のテキストファイルで出力する必要があったので、Streamオブジェクトを使った簡単なマクロを作ってみました。
Option Explicit Public Sub Sample() If LCase(TypeName(Application.Selection)) <> "range" Then Exit Sub '選択範囲を[UTF-8,タブ区切り,CRLF改行,ダブルクォーテーション囲み有]で[C:\Test\Test.csv]として出力 RangeToText Application.Selection, "C:\Test\Test.csv", "utf-8" '選択範囲を[EUC-JP,カンマ区切り,LF改行,ダブルクォーテーション囲み無]で[C:\Test\Test2.csv]として出力 RangeToText Application.Selection, "C:\Test\Test2.csv", "euc-jp", ",", 10, False MsgBox "処理が終了しました。", vbInformation + vbSystemModal End Sub Private Sub RangeToText(ByVal TargetRange As Excel.Range, _ ByVal FilePath As String, _ ByVal CharacterSet As String, _ Optional ByVal Separator As String = vbTab, _ Optional ByVal LnSeparator As Long = -1, _ Optional ByVal FlgQuotes As Boolean = True) '指定したセル範囲をテキストファイルとして出力 '---------------------------------------- 'TargetRange:出力対象セル範囲 'FilePath:出力先のフォルダパス 'CharacterSet:文字セット(HKEY_CLASSES_ROOT\MIME\Database\Charset 参照) 'Separator:区切り文字 'LnSeparator:行区切り文字(adCR:13, adCRLF:-1, adLF:10) 'FlgQuotes:["]で囲むかどうかを指定 Dim str As String Dim i As Long, j As Long Const adTypeText = 2 Const adWriteChar = 0 Const adWriteLine = 1 Const adSaveCreateOverWrite = 2 On Error Resume Next With CreateObject("ADODB.Stream") .Type = adTypeText .Charset = CharacterSet .LineSeparator = LnSeparator .Open For i = 1 To TargetRange.Rows.Count For j = 1 To TargetRange.Columns.Count If j = 1 Then If FlgQuotes = True Then str = ChrW(&H22) & TargetRange(i, j) & ChrW(&H22) Else str = TargetRange(i, j) End If Else If FlgQuotes = True Then str = str & Separator & ChrW(&H22) & TargetRange(i, j).Value & ChrW(&H22) Else str = str & Separator & TargetRange(i, j).Value End If End If Next If i = TargetRange.Rows.Count Then .WriteText str, adWriteChar Else .WriteText str, adWriteLine End If Next .SaveToFile FilePath, adSaveCreateOverWrite .Close End With If Err.Number <> 0 Then MsgBox "Err:" & Err.Description, vbCritical + vbSystemModal Exit Sub End If On Error GoTo 0 End Sub
文字セットや区切り文字を引数にしているので、例えば、[LF区切りのダブルクォーテーション囲み無しEUC-JPテキスト]といったファイルも簡単に作成することができます。
この記事へのコメントはありません。