Excel

【Excel】VBAマクロで文字コードを変換(utf-8やsjis)・取得・判定・一覧を作る方法【OpenFileDialog、FileSystemObject、ADODB.Stream】

当サイトでは記事内に広告を含みます

この記事では、ExcelのVBAマクロを使用して、ファイルの文字コードを取得、変換、判定、および一覧表を作成する方法について解説していきます。

ポイントとしては、`OpenFileDialog`、`FileSystemObject`、`ADODB.Stream`を使用することです。

なお、下記の解説では完全な初心者でもわかりやすいようにあえて変数名(あなた自身が名付けていい場所)を少々変わった名称にしております。

そのため、あなた自身がご活用の際には、ここを適切な(英語表記でしっくりくるものが一般的)ものに変更してご活用くださいね。

それでは詳しく見ていきましょう!

VBAマクロでファイルの文字コードを取得し変換(utf-8ならばsjisに、そうでなければそのまま)【OpenFileDialog、ADODB.Stream】

それではまず、VBAマクロでファイルの文字コードを取得し、utf-8ならばsjisに変換する方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。

Sub MojiCodeHenkanUtf8ToSjis()
    Dim hensuuFileDialog As Object
    Dim hensuuPath As Variant
    Dim hensuuStream As Object
    Dim hensuuText As String

    ' ファイルダイヤログを開く
    Set hensuuFileDialog = Application.FileDialog(3)
    hensuuFileDialog.AllowMultiSelect = True
    If hensuuFileDialog.Show = -1 Then
        For Each hensuuPath In hensuuFileDialog.SelectedItems
            ' 文字コードを取得してutf-8ならばsjisに変換
            Set hensuuStream = CreateObject("ADODB.Stream")
            hensuuStream.Open
            hensuuStream.Type = 2 'Text
            hensuuStream.Charset = "utf-8"
            hensuuStream.LoadFromFile hensuuPath
            hensuuText = hensuuStream.ReadText
            hensuuStream.Close

            hensuuStream.Open
            hensuuStream.Type = 2 'Text
            hensuuStream.Charset = "shift-jis"
            hensuuStream.WriteText hensuuText
            hensuuStream.SaveToFile hensuuPath, 2 'Overwrite
            hensuuStream.Close
        Next hensuuPath
    End If
End Sub

コードのAlt+F8を押し、マクロ選択画面でMojiCodeHenkanUtf8ToSjis関数を実行します。
このコードは、ファイルダイヤログを使って複数のファイルを選択し、それぞれのファイルの文字コードがutf-8であればshift-jisに変換します。

### タイトル: 【Excel】VBAマクロで文字コードを変換(utf-8やsjis)、取得、判定、一覧を作る方法【OpenFileDialog、FileSystemObject、ADODB.Stream、ConvertEncoding】

この記事では、ExcelのVBAマクロを用いてファイルの文字コードを変換、取得、判定する方法と、それを利用して文字コードの一覧表を作成する方法について解説していきます。ポイントとしては、`OpenFileDialog`, `FileSystemObject`, `ADODB.Stream`, `ConvertEncoding` を使用することです。下記の解説では完全な初心者でもわかりやすいようにあえて変数名を少々変わった名称にしています。それでは詳しく見ていきましょう!

VBAマクロでファイルの文字コードを取得し変換(sjisならばutf-8に、そうでなければそのまま)

続いて、文字コードをShift_JISからUTF-8に変換する方法を確認していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Function ConvertEncoding()

    Dim kaishiDialogue As FileDialog
    Set kaishiDialogue = Application.FileDialog(msoFileDialogFilePicker)
    
    With kaishiDialogue
        .Title = "ファイルを選択してください"
        .AllowMultiSelect = False
        .Filters.Add "Text Files", "*.txt", 1
        If .Show = -1 Then
            Dim fileStream As Object
            Set fileStream = CreateObject("ADODB.Stream")
            fileStream.Open
            fileStream.LoadFromFile .SelectedItems(1)
            fileStream.Charset = "Shift_JIS"
            Dim mojiretsu As String
            mojiretsu = fileStream.ReadText
            If mojiretsu.Contains("特定の文字列") Then
                fileStream.Charset = "UTF-8"
            End If
            MsgBox "ファイルの文字コードが変換されました。", vbInformation
            fileStream.SaveToFile .SelectedItems(1), 2  ' 上書き保存
            fileStream.Close
        End If
    End With
End Function

コードのAlt+F8を押し、マクロ選択画面でConvertEncoding関数を実行します。

この関数はOpenFileDialogを使用してユーザーにファイルを選択させ、選択されたファイルの文字コードがShift_JISならばUTF-8に変換します。

 

VBAマクロでファイルの文字コードを取得・判定し別ファイルに一覧表を作る方法

続いては、ファイルの文字コードを取得・判定し、それを元に一覧表を別のファイルに作成する方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Function CreateEncodingList()

    Dim mojiCodeList As

 Workbook
    Set mojiCodeList = Workbooks.Add
    mojiCodeList.Sheets(1).Cells(1, 1).Value = "ファイル名"
    mojiCodeList.Sheets(1).Cells(1, 2).Value = "文字コード"

    Dim fso As Object, folder As Object, file As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder("C:\YourFolder")  ' 対象フォルダを指定

    Dim rowNum As Integer
    rowNum = 2
    For Each file In folder.Files
        Dim fileStream As Object
        Set fileStream = CreateObject("ADODB.Stream")
        fileStream.Open
        fileStream.LoadFromFile file.Path
        mojiCodeList.Sheets(1).Cells(rowNum, 1).Value = file.Name
        mojiCodeList.Sheets(1).Cells(rowNum, 2).Value = fileStream.Charset
        rowNum = rowNum + 1
        fileStream.Close
    Next file

    mojiCodeList.SaveAs "C:\YourFolder\EncodingList.xlsx"
    mojiCodeList.Close False
End Function

コードのAlt+F8を押し、マクロ選択画面でCreateEncodingList関数を実行します。

この関数は指定されたフォルダ内のすべてのファイルの文字コードを取得し、新しいExcelファイルにその一覧を作成するものになっています。

 

まとめ VBAマクロで文字コードを取得・判定(utf-8やsjis)一覧を作る方法【OpenFileDialog、FileSystemObject、ADODB.Stream】

この記事では、ExcelのVBAマクロを用いて、ファイルの文字コードを取得、変換、判定、そして一覧表を作成する方法について詳しく解説しました。

特に、`OpenFileDialog`、`FileSystemObject`、`ADODB.Stream`というVBAの機能を駆使して、これらの操作を行う方法を学びました。

この知識を活用して、ExcelのVBAマクロをより効果的に使用してください。