ExcelデータをUTF-8なCSV(;区切り)で保存する
Excelで管理しているデータを、UTF-8で動かしているMySQLなテーブルへ、phpMyAdminを使ってインポートするための研究。
CSV形式のインポートは、区切り記号のデフォルトがなぜかセミコロンなので、毎度毎度いちいち手入力で変更しているのですが、これが面倒でたまりません。「ゆりかごから墓場まで、人生すべて自動処理」をモットーとする私としては、ポカミスを減らすためにも、CSVをセミコロン区切りに置換する処理系を考えました。
今回はコード変換と文字の置換をいっしょくたに処理するため、フリーソフトは使いませんでした。
あいかわらず、アクティブなシートだけを、ワークシートファイルのあったフォルダにCSV保存します。上書の確認はありませんし、そもそもこのVBAの動作保証を私がしていませんので、構造のわかる人だけが自己責任でいじってください。
Sub CSV作成()
' **********************************
' 初期設定
' **********************************
' オブジェクト変数の定義
Dim file_source As Object
Dim file_target As Object
' 保存ファイル名を決定
csv_file_name = ActiveWorkbook.Path + "\" + ActiveSheet.Name + ".csv"
' 文字コードを指定
code_source = "Shift_JIS"
code_target = "UTF-8"
' 置換文字を指定
char_source = ","
char_target = ";"
' 表示無効
Application.DisplayAlerts = False
' **********************************
' CSVファイルの保存
' **********************************
' 仮シートを複製
ActiveSheet.Copy
' CSV形式で保存
ActiveWorkbook.SaveAs Filename:=csv_file_name, FileFormat:=xlCSV, _
CreateBackup:=False
' 仮シートを閉じる
ActiveWindow.Close Savechanges:=False
' **********************************
' CSVファイルをUTF-8に変換
' **********************************
' ADODB.Streamを参照
Set file_source = CreateObject("ADODB.Stream")
' CSVファイルの読み込み
With file_source
.Charset = code_source
.Open
.LoadFromFile csv_file_name
char_temp = .ReadText
End With
' 置換処理
char_temp = Replace(char_temp, char_source, char_target)
' CSVファイルの書き出し
Set file_target = CreateObject("ADODB.Stream")
With file_target
.Charset = code_target
.Open
.WriteText char_temp
End With
' 文字コードの変換
file_source.copyto file_target
file_target.savetofile csv_file_name, 2
End Sub
とかいいながら、私のほうが正直、ADODB.Streamについては無理解のまま使ってなぜか動いちゃったという感じなので、細かい使い方は
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpado260/htm/mdmscadoobjects.asp
を参照してくれると安全です。
« ハイパーリンクの解除(Excel)その2 | トップページ | 01月13日のココロ日記(BlogPet) »
コメント
トラックバック
この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/151521/17667431
この記事へのトラックバック一覧です: ExcelデータをUTF-8なCSV(;区切り)で保存する:

素晴らしいコードを公開していただきましてありがとうございます。
感謝*御礼を申し上げたくコメント送らせて頂きます
ありがとうございます!
投稿: みさわ | 2011年8月 8日 (月) 午前 05時59分