自分方位研究所

日々の活動記録

(Excel VBA) 一行ずつテキストファイルを読み込む

テキストファイルを改行毎に分割して、Excelシートのセルへ1行ずつ出力していくマクロを作成しました。
ファイル名を取得する処理と、出力用シートを用意する処理、本番処理を分けています。

Function ファイルパスを取得 は、2022/2/13の記事で作成したものと基本的には同じですが、選択できるファイルの種類を、テキストファイル以外に、CSV、または、全てのファイル も選択できるようにしてみました。

Function 出力開始セルを指定 では、出力先のシートを新たに挿入しています。挿入されるExcelブックは、直近まで使用していたブックです。一番右側に新しくシートが挿入されます。

Sub 一行ずつテキストファイルを読み込む は、指定したテキストファイルを改行コードで区切ってシートに貼り付けていきます。

 

Function ファイルパスを取得() As String

'ダイアログボックスを開いてファイルを選択する。ファイルフルパスを取得。
    
    ファイルパスを取得 = Application.GetOpenFilename( _
        FileFilter:="Textです。(*.txt),*.txt,CSVです。,*.csv,全部です。(*.*),*.*", _
        TITLE:="ファイルを選択")
        
    Debug.Print ファイルパスを取得
    
    'ファイル選択でフルパスファイル名。キャンセルすると「False」を返す。

End Function

'◆===================================================


Function 出力開始セルを指定() As Range

'アクティブなブックにワークシートを1つ右端に追加。

    Worksheets.Add after:=Sheets(Sheets.Count)
    Set 出力開始セルを指定 = ActiveSheet.Range("A1")

End Function

'◆===================================================

Sub 一行ずつテキストファイルを読み込む()    

  Dim filePas As String filePas = ファイルパスを取得 If filePas = "False" Then End Dim stCell As Range Set stCell = 出力開始セルを指定 Dim FileNo As Integer '使用可能なファイル番号 FileNo = FreeFile Dim txt As String '改行毎の文字列 Dim rw As Integer '列(縦)方向のセル位置カウンタ rw = 0 Open filePas For Input As #FileNo Do Until EOF(FileNo) Line Input #FileNo, txt stCell.Offset(rw, 0) = txt rw = rw + 1 Loop Close #FileNo End Sub

 

と、ここまで書いておいて何なのですが、はてなブログの記事のエクスポートファイルの書き出しには、以下の2つの理由でうまくいきません。

  • 出力指定先の最初のセルに、全文書が入ってしまう(改行コードが認識されない)
  • 文字化けしたまま。(文字コードがUTF-8なのに,Sift-JISで読み込んでいるため)

こんな感じで出力されます。

f:id:k-emu:20220218205242j:plain

このコードで上手くいくのは

  • 文字コードが、Sift-JIS、ANSI である。(他にあるかも・・・)
  • 改行コードが CRLF [文字コード0D0A: Chr(13)+Chr(10) ] または、CR [文字コード0D: Chr(13) ]

どうすればよいか。また考えます。