★★★ Access2000VBA・Excel2000VBA独学~UTF-8、UTF-8(BOM付き)のテキストファイルを⇒Shift-JISに変換する関数~
※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。
※関連Web記事
『 ★★★ Access2000VBA・Excel2000VBA独学~Excelに、テキストファイルの内容を、「SQLを使いながら」・かつ・「絞り込みながら読み込む」方法(QueryTableオブジェクトにてODBC接続利用)※ADO+OLEDBは別です。~ 』
『 ADOでCSVの読み込み(SQL) 』
『 VBAでのCSVの扱い方まとめ(文字コードがどうしても関係する場合とか) 』
★UTF-8、UTF-8(BOM付き)のテキストファイルを⇒Shift-JISに変換する関数。
「Call Utf8ToSjis01(ファイルパス)」みたいな記述で使います。
以下の参考ページをもとに、ちゃんと変数宣言をしたかたちに作り替えました。
ただ、
「v_SplitRow = Split(s_AllText, vbCrLf)」
の行で、改行コードをvblfか、vbcrか、などが流動的なので、
ちゃんとした修正が必要かもしれません。
参考Webページ
https://daitaideit.com/vba-utf-8-transform/#mokuzi2
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
' ' '########################################################## 'UTF-8、UTF-8(BOM付き)のテキストファイルを⇒Shift-JISに '変換する関数。 'Call Utf8ToSjis01(ファイルパス) 'https://daitaideit.com/vba-utf-8-transform/#mokuzi2 '########################################################## Function Utf8ToSjis01(FilePath As String) Dim s_AllText As String Dim v_SplitRow As Variant Dim l_Cnt01 As Long Dim l_Cnt02 As Long '変換したいテキストファイルのファイルパスを作成 ' Dim FilePath ' FilePath = ThisWorkbook.Path & "\TEST.txt" ' FilePath = "d:\1\bbb_utf8.csv" 'UTF-8もしくはUTF-8(BOM付き)のテキストファイルを読み込み With CreateObject("ADODB.Stream") .Charset = "UTF-8" .Open .LoadFromFile FilePath s_AllText = .ReadText .Close End With 'UTF-8もしくはUTF-8(BOM付き)以外を読み込んでしまった場合は終了 For l_Cnt01 = 1 To Len(s_AllText) If Mid(s_AllText, l_Cnt01, 1) <> Chr(63) Then If Asc(Mid(s_AllText, l_Cnt01, 1)) = 63 Then Debug.Print "中止--※ソースが『 UTF-8もしくはUTF-8(BOM付き)』以外だったため。" ' MsgBox "中止" Exit Function End If End If Next '改行毎にデータを分ける。 v_SplitRow = Split(s_AllText, vbCrLf) '↑(※どの改行コードかわからないので、 ' 事前に1つのファイルとかで試す。) ' あるいは、自動チェックのコードを追記する) ' v_SplitRow = Split(s_AllText, vbCr) ' v_SplitRow = Split(s_AllText, vbLf) 'Shift-JIS形式でテキストファイルへ出力 Open FilePath For Output As #1 For l_Cnt02 = 0 To UBound(v_SplitRow) Print #1, v_SplitRow(l_Cnt02) Next Close #1 Debug.Print "完了" End Function ' ' |