1. まとめトップ

Excel VBAでUTF-8(BOM無し)に変換してCSV出力してみる

Excel VBAでシートの内容(Shift-jis)をUTF-8(BOM無し)に変換してCSV出力する例を紹介します

更新日: 2013年07月02日

Doctor.Yさん

  • このまとめをはてなブックマークに追加
6 お気に入り 19023 view
お気に入り追加

はじめに

Excel VBAでシートの内容(Shift-jis)をUTF-8(BOM無し)に変換してCSV出力する例を紹介します

手順0:VBAが使えるようにしておく

VBAでHello Worldができるように準備しておく

手順1:セルに文字を入力

セルに以下のような文字を入力

あ い う
え お か
き く け

手順2:ADODBを使えるようにしておく

・Microsoft Visual Basic エディターを開く

・メニューのツールの参照設定をクリック

・MicrosoftActiviXData Objects*.* Libraryを有効にする

手順3:UTF-8(BOM無し)に変換してCSV出力するプログラム作成

Sub utf8CSV_noBOM_Click()
  '変数宣言
  Dim i, j As Long
  Dim str As String

  'ADODBの設定
  Dim ado1 As New ADODB.Stream
  ado1.Type = adTypeText
  ado1.Charset = "UTF-8"
  ado1.LineSeparator = adLF '改行コードをLFに指定
  ado1.Open

  '最終行までループ
  For i = 1 To ActiveSheet.UsedRange.Rows.Count
    str = ""
    '最終列までループ
    For j = 1 To ActiveSheet.UsedRange.Columns.Count
      '1列目以外
      If j > 1 Then
        str = str & ","
      '1列目
      End If
        str = str & Cells(i, j)
    Next
    ado1.WriteText str, adWriteLine
  Next

  'BOMを削る前処理
  ado1.Position = 0 'ファイル先頭にセット
  ado1.Type = adTypeBinary 'バイナリに変更
  ado1.Position = 3 'BOMの3バイト分スキップ

  'BOMを削った分をコピー
  Dim ado2 As New ADODB.Stream
  ado2.Type = adTypeBinary
  ado2.Open
  ado1.CopyTo ado2

  'CSVファイルに保存
  ado2.SaveToFile ActiveWorkbook.Path & "\utf8.csv", adSaveCreateOverWrite

  'クローズ処理
  ado1.Close
  ado2.Close
End Sub

手順4:ボタンにプログラムを割り当て

・手順0で作成した図形ボタンを右クリック

・マクロの登録クリック

・手順3のサブルーチン選択

・OKクリック

手順5:Notepad++インストール

UTF-8(BOM無し)になっているかどうかを確認するためにNotepad++をインストールしておく

手順6:動作確認

・ボタンを押してエクセルと同じ場所にutf8.csvファイルが作成される

・Notepad++で開く

・手順1で入力した内容がCSVになっているか確認

・メニューのフォーマットクリック

・UTF-8(BOMなし) エンコードになっていればOK

1





Doctor.Yさん

このまとめに参加する



  • 話題の動画をまとめよう