はじめに
この課題は全10問中8問目の課題です。
着任時に取り組むことができるExcel VBA初学者向けの課題を作成しました。
今回の課題では、テキストファイルからデータを読み込むマクロを作成していただきます。外部データの取り扱い方を学び、ファイル操作の基本を習得していただければと思います。
目次
目的
外部データの取り扱い方を学び、ファイル操作の基本を習得することを目的としています。この課題を通じて、テキストファイルからデータを読み込み、その内容をExcelシートに表示する方法を実践的に学びます。
前提
①この記事の内容を理解するためには、以下の参考記事を先に読むことをおすすめします。
VBAの基礎を理解して課題に取り組んでください。
②以下の内容のテキストファイルを作成してください。
これはサンプルのテキストファイルです。
各行はExcelシートに読み込まれます。
VBAはテキストファイルを簡単に扱えます。
どのように動作するか見てみましょう!
これがサンプルファイルの最後です。
今回は例として「C:\sample\sample.txt」を使用すると仮定します。
課題内容
指定したテキストファイルからデータを読み込み、その内容をシートのA1セルから順に表示するマクロを作成してください。
※文字コードに注意してください
実装手順
1. 標準モジュールを追加する
標準モジュールは、複数のシートやブック全体で使用できるマクロを格納するための場所です。VBAエディタで新しい標準モジュールを追加します。
2. マクロのコードを記述する
- ExcelのVBAエディタを開いてください (
Alt + F11
) - 「挿入」→「標準モジュール」を選択し、以下のコードを入力します
※課題内容に取り組み、プログラムを開発した後に確認してください
Sub ImportTextFile()
Dim filePath As String
Dim fileStream As Object
Dim count As Long
filePath = "C:\sample\sample.txt"
Set fileStream = CreateObject("ADODB.Stream") 'Streamを生成
With fileStream
'文字コードを設定
.Charset = "UTF-8"
'改行コードを設定(-1:CRLF、10:LF)
.LineSeparator = 10
'Streamをオープン
.Open
'テキストファイルをStreamに読み込み
.LoadFromFile filePath
'初期値を設定
count = 1
'Streamの最後までループ
Do Until .EOS
'Streamから1行読み込み(-1:すべて読み込み、-2:1行読み込み)
Cells(count, 1) = .ReadText(-2)
count = count + 1
Loop
'Streamを閉じる
.Close
End With
End Sub
このコードは、指定したテキストファイルからデータを読み込み、その内容をシートのA1セルから順に表示するマクロです。コードを入力した後、F5キーを押すか、VBAエディタの「実行」ボタンをクリックしてマクロを実行します。
+α
テキストファイルが存在しない場合や、読み込み中にエラーが発生した場合、上記のコードはエラーになります。そのような場合でも、適切なエラーメッセージを表示するように修正します。
以下のコードはその対応策の一例です。
Sub ImportTextFile()
Dim filePath As String
Dim fileStream As Object
Dim count As Long
On Error GoTo ErrorHandler
filePath = "C:\sample\sample.txt"
Set fileStream = CreateObject("ADODB.Stream") 'Streamを生成
With fileStream
'文字コードを設定
.Charset = "UTF-8"
'改行コードを設定(-1:CRLF、10:LF)
.LineSeparator = 10
'Streamをオープン
.Open
'テキストファイルをStreamに読み込み
.LoadFromFile filePath
'初期値を設定
count = 1
'Streamの最後までループ
Do Until .EOS
'Streamから1行読み込み(-1:すべて読み込み、-2:1行読み込み)
Cells(count, 1) = .ReadText(-2)
count = count + 1
Loop
'Streamを閉じる
.Close
End With
Exit Sub
ErrorHandler:
MsgBox "ファイルが存在しないか、読み込み中にエラーが発生しました。", vbExclamation
End Sub
このコードでは、ファイルが存在しない場合や、読み込み中にエラーが発生した場合に、適切なエラーメッセージを表示するようにしています。
まとめ
今回の課題では、テキストファイルからデータを読み込み、Excelシートに表示するマクロを実装しました。さらに、エラーハンドリングを行うことで、外部データの取り扱い時に発生する可能性のある問題にも対処する方法を学びました。今後は、この基本を応用して、より高度なファイル操作に挑戦してみてください。