VBでなくVBAなのですが、以下のようなテキストファイルの1,2行目は行単位で、4行目以降は1データずつ読みたいのですが、自分の知識では'Line'を使用しての行単位での読み込みしかできません。方法があれば教えて頂きたく存じます。
DATE 03/03/21
TIME 09:44:21
(空行)
10 20 30 40 50
60 70 80 90 100
110 120 130 140 150
・
・
・
このような感じです。よろしくお願い致します。あと、VBAのファイル操作の詳しい解説書なども教えて頂けるとなお助かります。
No.2ベストアンサー
- 回答日時:
Option Explicit
Private Const DEF_TEST_FILE As String = "c:\test.txt"
Private Const DEF_LINE_INDEX_DATE As Integer = 1 '1行目が日付
Private Const DEF_LINE_INDEX_TIME As Integer = 2 '2行目が時間
Private Const DEF_LINE_INDEX_DATA As Integer = 4 '4行目以降がデータ
Private Const DEF_DATA_AREA As Integer = 4 '1データの領域を4文字とする
Private Const DEF_DATA_COUNT As Integer = 5 '1列のデータには、5データ存在する
Sub Main()
Dim intFile As Integer 'ファイルオープン用ファイル番号
Dim lngLen As Long 'ファイルバイトサイズ
Dim strBuff As String 'テキストバッファ
Dim lngUBound As Long '配列要素数
Dim varLineData As Variant '全データを改行コードでの配列として格納
Dim i As Long 'データ列ループカウンタ
Dim j As Integer 'データ列内、各データループカウンタ
'ファイルサイズ取得
lngLen = FileLen(DEF_TEST_FILE)
'文字領域確保
strBuff = String(lngLen, vbNullChar)
'ファイルをオープンして、全データ取得
intFile = FreeFile
Open DEF_TEST_FILE For Binary Access Read As #intFile
Get intFile, , strBuff
Close #intFile
'改行分割
varLineData = Split(strBuff, vbCrLf)
'配列要素数取得
lngUBound = UBound(varLineData)
'// 情報出力 //
'ヘッダ情報
Debug.Print "日付:" & varLineData(DEF_LINE_INDEX_DATE - 1)
Debug.Print "時間:" & varLineData(DEF_LINE_INDEX_TIME - 1)
'値情報
For i = (DEF_LINE_INDEX_DATA - 1) To lngUBound
For j = 1 To (DEF_DATA_COUNT * DEF_DATA_AREA) Step DEF_DATA_AREA
Debug.Print Trim$(Mid$(varLineData(i), j, DEF_DATA_AREA))
Next j
Next i
End Sub
す、すごいです。まさに期待していた通りの完璧の動作をしました。専門の知識を惜しげもなく披露して頂き誠に恐縮です。ただ、私の方がまだかなりの勉強不足でソースを理解し切れていないので、なるべく早く教本を入手して理解したいと思います。本当にありがとうございました。
No.1
- 回答日時:
下記コードで、確認のためMSGBOXを入れていますが、本来の処理したいルーチンで置換えてください。
質問のデータでDate、Timeと10から150
まで表示されるのを確認しました。区切り文字ですが、
1半角スペースにメモ帳で修正して、ファイル保存して
実行しました。この点実際のファイルがどうなっているか
微妙です。
FORループで0から4は項目数で変えてください。
下記コードは旧Basic式ですが、他にもあると思います。Split関数はE2000以後ぐらいから使えると
思います。なければINSTR関数で区切り文字の位置を
割り出す処理になります(略)。
Sub test01()
Open "c:\my documents\tt2.txt" For Input As #1
Line Input #1, a
MsgBox a 'すべき処理ルーチンを入れる
Line Input #1, a
MsgBox a 'すべき処理ルーチンを入れる
Line Input #1, a
While Not EOF(1)
Line Input #1, a
b = Split(a, " ")
For i = 0 To 4
MsgBox b(i) 'すべき処理ルーチンを入れる
Next i
Wend
Close #1
End Sub
早速のご回答ありがとうございました。
私の説明が不足してしまい失礼いたしました。当方Excel2002ですので、教えて頂いたソースを実行しましたところ正常に動作、Split関数は使用可能でした。またデータですが、実際は1~999までの数字が入り乱れて
10 248 645 9 86
232 45 778 99 100
0 222 76 412 9
・
・
・
のような感じで1の位が揃っている状態にあります。ですので、3桁同士の数字が隣り合っている場合は1半角スペース間隔ですが、1桁や2桁の数字が来た場合に右隣のデータとの間隔が変化してしまう難点があります。でも、行単位で読み込んだデータをSplitで区分けできる方法を教えて頂いただけでも十分勉強になりました。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) 非表示にしたい行をグループ化して折り畳み 4 2022/09/17 20:17
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:00
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:02
- Visual Basic(VBA) vbaのループ処理について 6 2022/05/06 15:35
- PHP PHPでテキストファイルに保存した時の改行問題 1 2022/11/19 15:07
- Visual Basic(VBA) マクロを教えてください。 7 2023/06/01 19:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バイナリエディタのつかいかた
-
バッファとは何ですか
-
C言語とシリアル通信の送受信...
-
PHPのfgetcsvの処理容量について
-
C言語で、ファイルを読み込んで...
-
JavaScriptの実行速度が遅い
-
既存アプリを利用したプログラ...
-
Microsoft VBAで2GBを超えるフ...
-
VBAでバイト型データをファイル...
-
エラー:ストリームの終わりを...
-
ビットマップファイル生成(C言...
-
iアプリのスクラッチパッドにつ...
-
C言語初心者の質問失礼します。
-
マイクラでPythonのプログラミ...
-
ExcelVBA サーバーの(共有フォ...
-
Pythonについてです。 中間記法...
-
FTPでputすると空ファイルが出...
-
eclipseで作ったプログラムを他...
-
どんなプログラムを書いても指...
-
C言語を用いたファイルの一括削...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
EXCEL VBAでテキストファイルの...
-
VBA バイナリ―から文字列にす...
-
バイナリエディタのつかいかた
-
EOF
-
エクセルVBA 2千万行のCSVファ...
-
ページ読み込み時に自動的にsub...
-
エラー:ストリームの終わりを...
-
画像の保存方法。
-
【python】Excelファイルを読み...
-
MacからWinにファイルを添付す...
-
入力ファイルをバイナリにする利点
-
EXCEL VBAで、バイナリデータの...
-
PHPのfgetcsvの処理容量について
-
HDDのバイナリイメージの取得方...
-
VBAを使って、一部バイナリデー...
-
FTPでエクセルをPUTするとファ...
-
リストビュー ⇔ 別ファイル構...
-
VBScriptでメタデータを取得したい
おすすめ情報