【初心者必見!】VBAプログラミング講座 EXCEL表にファイルの内容を入出力する。

スポンサーリンク
プログラミング
スポンサーリンク
Pocket
LINEで送る

EXCEL VBAでよく使うものとして、ファイルの内容をEXCELシートに出力する事があると思います。
今回は、ファイルの入出力とEXCELシートへの転記について記事にしようと思います。

ファイルのデータをEXCELシートに転記する

テキストファイルの内容をEXCELのシートに出力する方法です。
サンプルとして入出力用のシートを作ってみました。

画面の仕様は、入力ファイル指定欄C2セルに入力されたファイルをオープンし、項番となる#欄(B6)以降に番号を出力、入力データ表示欄(C:6)以降にファイル内容を出力する。

実行はファイル入力ボタンを押すことで起動される。

プログラミングは以下。

入力ファイル名欄のC2セルの内容をワークエリアに格納し、ファイルオープン。
ファイルオープン後、ファイルEOFまでループし、カウンタとファイルの内容を指定セルに出力。

Sub FileIO_I()

 Dim Infile As String
 Dim linecnt As Long
 Dim strstm As String

 Infile = Workbooks(1).ActiveSheet.Cells(2, 3)
 Open Infile For Input As #1

 linecnt = 1

  Do While (EOF(1) = False)
   Line Input #1, strstm Workbooks(1).ActiveSheet.Cells(linecnt + 5, 2) = linecnt
   Workbooks(1).ActiveSheet.Cells(linecnt + 5, 3) = strstm
     linecnt = linecnt + 1
  Loop

  Close #1
  MsgBox ("処理終了")

End Sub

入力データの内容は以下。

実行するとこんな感じ

注意点としては、入力ファイルの文字コードがEXCEL VBAではShiftJISしか扱えない為、他の文字コードで作成されたファイルでは文字化けが発生してしまう事。

これについては、後述で対応策を記載します。

EXCELシートのデータをファイルに転記する。

EXCELシートの内容をテキストファイルに出力する方法です。
入出力用のシートの出力側の機能になります。

画面の仕様は、出力ファイル指定欄C3セルに入力されたファイルをオープンし、出力データ欄(D:6)以降の内容をファイル出力する。

実行はファイル出力ボタンを押すことで起動される。

プログラミングは以下

出力ファイル名欄のC3セルの内容をワークエリアに格納し、ファイルオープン。
ファイルオープン後、EXCELシートのD6セル以降でデータが空になるまでループし、EXCELシートのD6以降の内容をファイルに出力。

Sub FileIO_O()

 Dim Otfile As String
 Dim linecnt As Long
 Dim strstm As String

 Otfile = Workbooks(1).ActiveSheet.Cells(3, 3)
 Open Otfile For Output As #1

 linecnt = 6

 strstm = Workbooks(1).ActiveSheet.Cells(linecnt, 4)

 Do While (Workbooks(1).ActiveSheet.Cells(linecnt, 4) <> "")
     Print #1, strstm
     linecnt = linecnt + 1 
     strstm = Workbooks(1).ActiveSheet.Cells(linecnt, 4)
 Loop

 Close #1

 MsgBox ("処理終了")

End Sub

実行すると、出力ファイル名欄に記載した内容のファイルが作成され、EXCELシートの内容が出力されている。

入力ファイルの文字コード問題

EXCEL VBAは非常に手軽にプログラミングを作成できる代わりに、基本機能で扱える文字コードがShift-JISだけと言う厄介な問題をもっています。
ちなみにVB.netでは入力ファイルの文字コードを指定できる為、この問題は発生しません。
このVBAが旧Visual Basicの流れを汲んでいる為の仕様です。
VBA側だけで対処する場合は、ADO(ActiveX Data Objects)の機能を使用する事で対処は可能ですが、結構メンドクサイです。

個人的に楽なやり方は、入力ファイル自体をバッチファイルを使って文字コード変換してしまうです。

参考にできそうなサイトがあったので紹介します。

Windows10 バッチでnkf(文字コード変換)UTF-8 → Shift-JIS – min117の日記 (hatenablog.com)

実際に上記サイトを参考に作成したバッチファイルが以下
ファイル名:cnv_SJIS.bat

コマンドライン引数の1つ目が入力ファイル、2つ目が出力ファイルにしています。

echo  %1
echo  %2
 powershell -NoProfile -ExecutionPolicy Unrestricted -Command "& { get-content -Encoding UTF8 %1 | Set-Content %2}"

Windowsのコマンドラインで、
“D:\EXCEL VBA\cnv_SJIS.bat” d:\test\IOtest4.txt d:\test\IOtest4.txt_wk
を実行するとSJISに変換できました。
メモ帳の右下でUTF-8となっていたところ、出力ファイルでは、ANSIに変換されています。

Pocket
LINEで送る

プログラミング
スポンサーリンク
bassmaniaをフォローする
コロナ後の世界でお金を稼ぐ方法を考えるブログ

コメント