テキストファイルを改行毎に分割して、Excelシートのセルへ1行ずつ出力していくマクロを作成しました。
ファイル名を取得する処理と、出力用シートを用意する処理、本番処理を分けています。
Function ファイルパスを取得 は、2022/2/13の記事で作成したものと基本的には同じですが、選択できるファイルの種類を、テキストファイル以外に、CSV、または、全てのファイル も選択できるようにしてみました。
Function 出力開始セルを指定 では、出力先のシートを新たに挿入しています。挿入されるExcelブックは、直近まで使用していたブックです。一番右側に新しくシートが挿入されます。
Sub 一行ずつテキストファイルを読み込む は、指定したテキストファイルを改行コードで区切ってシートに貼り付けていきます。
Function ファイルパスを取得() As String
ファイルパスを取得 = Application.GetOpenFilename( _
FileFilter:="Textです。(*.txt),*.txt,CSVです。,*.csv,全部です。(*.*),*.*", _
TITLE:="ファイルを選択")
Debug.Print ファイルパスを取得
End Function
Function 出力開始セルを指定() As Range
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で読み込んでいるため)
こんな感じで出力されます。
このコードで上手くいくのは
- 文字コードが、Sift-JIS、ANSI である。(他にあるかも・・・)
- 改行コードが CRLF [文字コード0D0A: Chr(13)+Chr(10) ] または、CR [文字コード0D: Chr(13) ]
どうすればよいか。また考えます。