2012年3月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
フォト

« ハイパーリンクの解除(Excel)その2 | トップページ | 01月13日のココロ日記(BlogPet) »

2008年1月12日 (土)

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(;区切り)で保存する:

« ハイパーリンクの解除(Excel)その2 | トップページ | 01月13日のココロ日記(BlogPet) »