教えて!gooグレードポイントがdポイントに!

111 (tab) AAA (tab) あああ(改行)
222 (tab) BBB (tab) いいい(改行)
333(tab) CCC(tab) ううう (改行)

上記のようなtxtファイルがあり文字がtab区切りで入力されています。
VBAでtab区切りで認識して文字列として配列に格納したいのですが、
具体的にどのような構文を書けばよろしのでしょうか?

質問者からの補足コメント

  • 書き忘れていました。
    できれば1行ごとに区別したいので

    二次元配列(行、tab区切りの文字列)

    みたいな形に収めれれば理想です。

      補足日時:2021/12/03 17:25
教えて!goo グレード

A 回答 (7件)

あれ?


既に解決済みかと思ってました。

Dictionaryでジャグ配列的な物。
行・列のインデックスは0から始まります。
なのでこの場合は、
(0)(0) (0)(1) (0)(2)
(1)(0) (1)(1) (1)(2)
(2)(0) (2)(1) (2)(2)
となります。

Sub megu()
Dim myDic As Object
Dim buf As String, myPath As String
Dim n As Integer

Set myDic = CreateObject("Scripting.Dictionary")
n = 0
'テキストファイルはBookと同じフォルダにあるとして
myPath = ThisWorkbook.Path

Open myPath & "\xyz.txt" For Input As #1
Do Until EOF(1)
Line Input #1, buf
myDic.Add n, Split(buf, vbTab)
n = n + 1
Loop
Close #1

Debug.Print myDic(0)(0), "|", myDic(1)(1), "|", myDic(2)(2)

Set myDic = Nothing

End Sub

出力例:
111 | BBB | ううう
    • good
    • 1

No.5です。



追加につきましてはDictionaryクラスと勘違いでした。
すいません。
    • good
    • 0

No.2です。



個人的ですがExcelならSheetを前提としますが他のアプリならそうではないでしょうから、私ならDictionaryオブジェクトでキーをナンバーリング、アイテムを1次元配列にしたジャグ配列にしますかね。
そうすると後からある行を追加・削除も行数がわかっていれば簡単ですし、不明でも検索させるのは可能でしょうから。

とスマホだとここまでで精一杯。
    • good
    • 0

こんにちは



◇まともにやるなら、テキストとして1行ずつ読み込み、tabを区切りとして分解するという手順になると思います。
・テキストファイルをopenして読み込む
http://officetanaka.net/excel/vba/file/file08b.htm

・区切り文字で文字列を分解(1次元配列になります)
https://docs.microsoft.com/ja-jp/office/vba/lang …


◇別法として、tab区切りのファイルとしてシートに読み込み、値のある範囲をまとめて配列に読み込むという方法も考えられます。
(多分、こちらの方法の方が簡単かと思います)
・テキストファイルをブックとして開く
https://docs.microsoft.com/ja-jp/office/vba/api/ …
(tab区切りの場合は、Formatの区切りを1にします)

・値のある範囲を配列変数に読み込む
  ary = Range.Value
で、二次元配列としてまとめて取得できます。(Variantの必要があります)
https://docs.microsoft.com/ja-jp/office/vba/api/ …

対象とするRangeには、UsedRangeを利用すれば良いでしょう。
https://docs.microsoft.com/ja-jp/office/vba/api/ …
    • good
    • 5

No.2です。



あ”もしかしたらテキストファイル1行ずつの話でしたかね?
改行コードに触れてないようですし。
    • good
    • 0

どういう配列(1次元・2次元・ジャグなど)にしたいかで変わりそうですね。


1次元なら既出ですが、加えて先に改行コードをタブに置換する必要はあるでしょう。
2次元なら既出の方法で改行コードで区切った変数の値を1つずつ別の変数(2次元で準備した物)にタブで区切って入れていくとかかな。

スマホなので詳しくは書けずごめんなさい。
    • good
    • 0

こんにちは。



タブ区切りの文字を配列に入れるには、Variant型の配列と、後はSplitで、
vbTab(VBAの予約語で、tabを意味する)を指定すれば、可能かと思います。

Dim mySplitDat As Variant
mySplitDat = Split("文字列や変数など", vbTab)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング