トップページ(目次)

182.TSVファイルを開かずに読み込む

<実行前後>
 → 
【コツ】 表示 > ローカル ウィンドウ を表示してデータの中身を確認しながら書きます

Sub TSVファイルを開かずに読み込む()
    
    '↓を書けば [参照設定]Microsoft ActiveX Data Objects x.x Library が不要
    Set TSV = CreateObject("ADODB.Stream")
    
    TSVファイル = "C:\test\TSVサンプル.tsv"
    
    TSV.Charset = "UTF-8"
    TSV.Open
    TSV.LoadFromFile TSVファイル
    
    '①全文取り込む
    全文 = TSV.ReadText(-2)
    
    '②タブで分けて1次配列で全文を格納する
    全文個別 = Split(全文, vbTab)
    
    '③2次配列格納用
    ReDim TSV完成(1 To UBound(全文個別) / 4, 1 To 5)
    
    '5列のため4個づつ処理(UBound(全文個別)は配列内の最大個数12)
    For 全文個別行 = 0 To UBound(全文個別) - 4 Step 4
    
        配列行 = 配列行 + 1
        
        '各行最右列と各行最左列は結合されている(例:[E1 A2])
        'ので、左字 = [E1] と 右字 = [A2] を毎回分けている
        
        'まず対象を取得する(↓毎行5列目(最右列)を指定している)
        対象 = 全文個別(全文個別行 + 4)
        
        '分割後に右字を取得するために先に文字数を取得
        文字数 = Len(対象)
        
        '左右に分割するためにvbLf(改行コード)が何文字目にあるのか取得
        分割 = InStr(対象, vbLf)
        
        '④左文字を取得
        左字 = Replace(Left(対象, 分割), vbLf, "")
        
            TSV完成(配列行, 1) = 右字
            TSV完成(配列行, 2) = 全文個別(全文個別行 + 1)
            TSV完成(配列行, 3) = 全文個別(全文個別行 + 2)
            TSV完成(配列行, 4) = 全文個別(全文個別行 + 3)
            TSV完成(配列行, 5) = 左字
        
        '⑤右文字を次の行で使用するためここで取得
        右字 = Right(対象, 文字数 - 分割)
    
    Next 全文個別行
    
    '最初と最後が欠損するため補填する
    
    '最初は全文個別(0)
    TSV完成(1, 1) = 全文個別(0)
    
    '最後は全文個別(UBound(全文個別))
    TSV完成(配列行, 5) = 全文個別(UBound(全文個別))
    
    'TSVを閉じて終了
    TSV.Close
    
    '③完成したデータをシートへ出力
    Range(Cells(1, 1), Cells(配列行, 5)) = TSV完成

End Sub
元データ → 1次配列で格納 → 2時配列で再格納 → 出力 というかなり難解な構成です。 ローカルウィンドウで変数の中身を1つづつチェックしながら作成することを推奨します。

Copyright © 2021 https://excel3000.web.fc2.com/ All Rights Reserved.
    inserted by FC2 system