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つづつチェックしながら作成することを推奨します。