ファイルの操作(Shift-JIS/UTF8対応)[ExcelのVBA]
VB/VBAでファイルを読み書きする方法です。文字コードはShift-JIS、UTF8の両方に対応しています。
事前準備
ファイルを操作する為のサンプルデータのテキストファイルをダウンロードします。文字コードは「Shift-JIS版、UTF8版」の2種類あります。
excel_vba_22_sjis.txt (Shift-JIS版)
excel_vba_22_utf8.txt (UTF8版)
ダウンロードしたテキストファイルは「C:¥」に置きます。
※「C:¥」とはCドライブの直下という意味です。
ファイルの中身は「Shift-JIS/UTF8」共に同じで下記の通りです。
プチモンテ http://www.petitmonte.com/ エクセル講座 http://www.petitmonte.com/excel/excel.html
ファイルの読み込み(Shift-JIS版)
コード
Option Explicit
Private Sub CommandButton1_Click()
Dim fileNo As Integer ' ファイル番号
Dim buffer As String ' 一時的に文字列を格納
' ファイルを開く為のファイル番号を取得
fileNo = FreeFile
' 指定されたファイルを開く
Open "C:\excel_vba_22_sjis.txt" For Input As #fileNo
' ファイルがEOF(ファイルの終端)になるまでループをする
Do Until EOF(fileNo)
' ファイルから一行づつbufferに読み込む
Line Input #fileNo, buffer
' 読み込んだ一行をイミディエイトに出力
Debug.Print buffer
Loop
Close #fileNo
End Sub
結果
正常にファイルが読み込めましたね。
次に11行目の「excel_vba_22_sjis.txt」を「excel_vba_22_utf8.txt」に変更すると・・・。
このように「文字化け」してしまいます。これを回避するにはUTF8に対応したテキストファイルの読み込みをしなければいけません。(後述します。)
ファイルの書き込み(Shift-JIS版)
ファイルの書き込みをする前にエクセルを名前を付けて「デスクトップ」に保存してください。サンプルコードを実行するとエクセルのファイルがある同一フォルダ(ここではデスクトップ)にファイルが作成されます。
Private Sub CommandButton2_Click()
Dim fileNo As Integer ' ファイル番号
' ファイルを開く為のファイル番号を取得
fileNo = FreeFile
' 指定されたファイルを開く(ない場合は作成する)
Open "Sjisの書き込みテスト.txt" For Output As #fileNo
' 一行毎に文字列を書き込む
Print #fileNo, "エクセル講座"
Print #fileNo, "http://www.petitmonte.com/excel/excel.html"
Close #fileNo
End Sub
ファイル操作のまとめ(Shift-JIS版)
Visual Basicでファイルを操作するには「FreeFile」でファイル番号を取得して「Open」でファイルを開きます。「Line Input/Print」でファイルの内容を扱い、最後に「Close」でファイルを閉じます。
Openの書式は次の通りです。
| 内容 | 備考 |
|---|---|
| ファイル名 | フルパス名またはファイル名を指定する。フルパス名でない場合はカレントディレクトリからファイルを探す。 |
| モード |
Input 入力モード Output 出力モード Append 追記モード Binary バイナリモード |
| ファイル番号 | FreeFileで取得したファイル番号を指定する |
ファイルの読み込み(UTF8版)
コード
Private Sub CommandButton3_Click()
Dim buffer As String ' 一時的に文字列を格納
Dim Stream As Object
' VB標準のADODB.Streamオブジェクトを作成する
Set Stream = CreateObject("ADODB.Stream")
' ストリームの文字コードをUTF8に設定する
Stream.Charset = "UTF-8"
' ファイルのタイプ(1:バイナリ 2:テキスト)
Stream.Type = 2
' ストリームを開く
Stream.Open
' ストリームにファイルを読み込む
Stream.LoadFromFile ("C:\excel_vba_22_utf8.txt")
' ファイルの中身をbufferへ代入
buffer = Stream.ReadText
' ストリームを閉じる
Stream.Close
' イミディエイトへ出力
Debug.Print buffer
Set Stream = Nothing
End Sub
結果
今度は正常にファイルが読み込めましたね。
ファイルの書き込み(UTF8版)
Private Sub CommandButton4_Click()
Dim Stream As Object
' VB標準のADODB.Streamオブジェクトを作成する
Set Stream = CreateObject("ADODB.Stream")
' ストリームの文字コードをUTF8に設定する
Stream.Charset = "UTF-8"
' ファイルのタイプ(1:バイナリ 2:テキスト)
Stream.Type = 2
' ストリームを開く
Stream.Open
' ストリームの保存形式をテキスト形式にする
Stream.WriteText "エクセル講座" & vbCrLf & "http://www.petitmonte.com/excel/excel.html"
' ストリームに名前を付けて保存する(1は新規作成 2は上書き保存)
Stream.SaveToFile ("utf8の書き込みテスト.txt"), 2
' ストリームを閉じる
Stream.Close
Set Stream = Nothing
End Sub
ファイル操作のまとめ(UTF8版)
ADODB.Streamオブジェクトを使用してファイルを読み込み、書き込みます。「Stream.Charset = "UTF-8"」で文字コードを「UTF8」に指定していますが、他の文字コードに変更するとその文字コードで読み書きが可能です。Shift-JISを扱いたいときは「Shift_JIS」「Shift-JIS」「SJIS」。UTF8は「UTF-8」、EUCは「EUC-JP」、JISは「ISO-2022-JP」となります。
今時は「FreeFile」と「Open」を使ったファイル操作ではなく、ADODB.Streamを使ったファイル操作が主流かも知れません。
メモ

このような場合はWithステートメントを使用するとコードをすっきり出来ます。

Withステートメントはオブジェクト(クラスやコントロール)などに使用することができます。
Visual Basicの基礎
変数/定数/リテラル/データ型/有効範囲
配列/動的配列/構造体/列挙型/エスケープシーケンス
算術演算子/比較演算子/データの型変換
制御構造(If/For/Select/While/Do)
Sub/Functionプロシージャ(手続き/関数)
クラスの作成と使い方
ファイルの操作
エラートラップ
基本のまとめ(上級者用)
エクセル講座のクイックリンク
関連記事
| 前の記事: | クラスの作成と使い方[ExcelのVBA] |
| 次の記事: | エラートラップ[ExcelのVBA] |
プチモンテ ※この記事を書いた人
![]() | |
![]() | 💻 ITスキル・経験 サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。 画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ |
| 🎵 音楽制作 BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は抒情詩、抒情的な楽曲が多い。楽曲制作は🔰2023年12月中旬 ~ | |









