excelVBAで、テキストファイルを生成するプログラムを作りました。(正確にはics形式)


UTF-8形式にしないといけないのですが、方法が分かりません。
ご存知の方お教え下さい。

win2000pro,excel2003

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/02/26 01:45:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:khoshi3 No.1

回答回数71ベストアンサー獲得回数12

ポイント35pt

いちばんシンプルなのは、テキストを漢字コンバータを使ってutf8に変換する方法です。(下記のはコマンドラインで使います):

  • nkf.exe nkf32.dll Windows用(Windows95/98/Me / ユーティリティ):

http://www.vector.co.jp/soft/win95/util/se295331.html

VBA上でutf8でファイル出力するクラスモジュールもあるようです。:

  • UTF-8ファイル作成 for VBA(WindowsNT/2000/XP/Vista / プログラミング):

http://www.vector.co.jp/soft/winnt/prog/se320375.html

本ソフトはUTF-8符号化テキストファイル作成のためのVBAクラスモジュールです。

id:ardarim No.2

回答回数897ベストアンサー獲得回数145

ポイント35pt

Excel VBAでUTF-8を吐き出す簡易サブルーチンを作ってみました。

UTF8_openでオープン、UTF8_writeで書き込み、UTF8_closeでクローズです。

Option Base 0
Option Explicit

Sub test()

    Dim fn As Integer
    
    fn = UTF8_open("c:\temp\utf8.txt")
    
    Call UTF8_write(fn, "UTF-8 test" & vbCrLf)
    Call UTF8_write(fn, "UTF-8テスト" & vbCrLf)
    
    Call UTF8_close(fn)
    
End Sub

Function UTF8_open(filename As String) As Integer

    Dim fn As Integer
    Dim bom(2) As Byte
    
    If Dir(filename) <> "" Then
        Kill filename   ' Delete if exists
    End If
    
    fn = FreeFile()
    Open filename For Binary Access Write As #fn

    bom(0) = &HEF
    bom(1) = &HBB
    bom(2) = &HBF

    Put #fn, , bom      ' Write UTF-8 BOM

    UTF8_open = fn

End Function

Sub UTF8_write(ByVal fn As Integer, ByVal data As String)
    
    Dim objStm As Object
    Dim ba() As Byte
    
    Set objStm = CreateObject("ADODB.Stream")
    
    objStm.Open
    objStm.Type = 2 'adTypeText
    objStm.Charset = "utf-8"
    objStm.WriteText data
    
    objStm.Position = 0
    objStm.Type = 1 'adTypeBinary
    objStm.Position = 3     ' Skip BOM
    
    ba = objStm.read()
    Put #fn, , ba
    
    objStm.Close
    Set objStm = Nothing

End Sub

Sub UTF8_close(ByVal fn As Integer)

    Close #fn
    
End Sub

URLはダミー

http://q.hatena.ne.jp/1203352905

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません