この記事では、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マクロをより効果的に使用してください。