★★★ 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 ' ' | 
  
  
  
