【課題】No.8 テキストファイルからデータを読み込むマクロの作成【Excel VBA】

## はじめに
この課題は全10問中8問目の課題です。  
着任時に取り組むことができるExcel VBA初学者向けの課題を作成しました。
今回の課題では、テキストファイルからデータを読み込むマクロを作成していただきます。外部データの取り扱い方を学び、ファイル操作の基本を習得していただければと思います。

## 目次
- [目的](#目的)
- [前提](#前提)
- [課題内容](#課題内容)
- [実装手順](#実装手順)
  - [1. 標準モジュールを追加する](#1-標準モジュールを追加する)
  - [2. マクロのコードを記述する](#2-マクロのコードを記述する)
- [まとめ](#まとめ)
- [参考記事](#参考記事)

## 目的
外部データの取り扱い方を学び、ファイル操作の基本を習得することを目的としています。この課題を通じて、テキストファイルからデータを読み込み、その内容をExcelシートに表示する方法を実践的に学びます。

## 前提
①この記事の内容を理解するためには、以下の参考記事を先に読むことをおすすめします。  
　VBAの基礎を理解して課題に取り組んでください。
- [初心者でも図解で分かる！ VBEの基本的な使い方とVBAプログラムの基礎文法](https://atmarkit.itmedia.co.jp/ait/articles/1402/13/news040_3.html)

②以下の内容のテキストファイルを作成してください。
```plaintext
これはサンプルのテキストファイルです。
各行はExcelシートに読み込まれます。
VBAはテキストファイルを簡単に扱えます。
どのように動作するか見てみましょう！
これがサンプルファイルの最後です。
```

今回は例として「C:\sample\sample.txt」を使用すると仮定します。


## 課題内容
**指定したテキストファイルからデータを読み込み、その内容をシートのA1セルから順に表示するマクロを作成してください。**
**※文字コードに注意してください**

## 実装手順

### 1. 標準モジュールを追加する
標準モジュールは、複数のシートやブック全体で使用できるマクロを格納するための場所です。VBAエディタで新しい標準モジュールを追加します。

### 2. マクロのコードを記述する
1. ExcelのVBAエディタを開いてください (`Alt + F11`)
2. 「挿入」→「標準モジュール」を選択し、以下のコードを入力します  
**※課題内容に取り組み、プログラムを開発した後に確認してください** 
```vb
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エディタの「実行」ボタンをクリックしてマクロを実行します。

### +α
テキストファイルが存在しない場合や、読み込み中にエラーが発生した場合、上記のコードはエラーになります。そのような場合でも、適切なエラーメッセージを表示するように修正します。
以下のコードはその対応策の一例です。
```vb
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シートに表示するマクロを実装しました。さらに、エラーハンドリングを行うことで、外部データの取り扱い時に発生する可能性のある問題にも対処する方法を学びました。今後は、この基本を応用して、より高度なファイル操作に挑戦してみてください。

## 参考記事
1. [VBAでテキストファイルを読み込む方法](https://access-skill.com/vba-read-textfile/)
2. [【エクセルVBA】テキストファイルを読み込む（文字コード、改行コードを指定）（ADODB – Stream）](https://kabonote.com/excel-vba/readtextfile/)
3. [【VBA入門】エラーを処理する方法(On Error、Resume、GoTo)](https://www.sejuku.net/blog/35484)