自分方位研究所

日々の活動記録

(Excel VBA) UTF8形式のテキストファイルのExcelシートへの書き出し

はてなブログの記事のエクスポートファイルをExcelシートに書き出すマクロを作成しました。

今回追加したコードは、以下の4行。
SHIFT-JISに変換したテキストファイル(tmpText) を Split関数を使用して、改行コードvbLF(ASCIIコード10)で、区切って、配列化しています。

配列化するのは高速化のためで、配列化せずに1行ずつシートに入力していくと、とんでもなく時間がかかってしまうためです。

全てのデータを一度配列に代入して、それを一度にセルに書き込みます。速いです。

'ファイルを改行コード"vbLf"で区切る(配列化)
    Dim txtArr As Variant
    txtArr = Split(tmpText, vbLf)

'配列データを一気にセル出力(縦方向に出力)
    Range(stCell, stCell.Offset(UBound(txtArr), 0)) = _
    WorksheetFunction.Transpose(txtArr)

 

以下のマクロを実行すると、UTF-8形式のファイル(はてなブログの記事のエクスポートファイル)を指定して、それを新規に追加したExcelシート上に全記事分のデータが貼り付きます。

Sub UTF8形式のテキストファイルのシートへの書き出し()

    Dim filePas As String
    filePas = ファイルパスを取得
    If filePas = "False" Then End

    Dim stCell As Range
    Set stCell = 出力開始セルを指定
    

    Dim tmpText As String
    tmpText = UTF8をSHIFTJIS化(filePas)


'ファイルを改行コード"vbLf"で区切る(配列化)
    Dim txtArr As Variant
    txtArr = Split(tmpText, vbLf)

'配列データを一気にセル出力(縦方向に出力)
    Range(stCell, stCell.Offset(UBound(txtArr), 0)) = _
    WorksheetFunction.Transpose(txtArr)


End 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


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

Function UTF8をSHIFTJIS化(filePas) As String

    Dim ADODBobj As Object
    Set ADODBobj = CreateObject("ADODB.Stream")
    
    With ADODBobj
        .Charset = "UTF-8" '"UTF-8" "SHIFT-JIS" '"UTF-8"
        .Open
        .LoadFromFile filePas
    End With
    
    UTF8をSHIFTJIS化 = ADODBobj.ReadText
    
    ADODBobj.Close

    Set ADODBobj = Nothing

End Function

 

次の工程は、書き出した記事内容を加工して、見やすい記事一覧にすることです。
もう、Excelシートに取り込んだのですから、いかようにもできると思います。