<あるファイルから指定した行数分データを抜き出す>
どうも、三流プログラマーのKen3です。 今回は、 掲示板にあった質問、 >タイトル:csvファイルの指定した行の表示 で、 Dir関数、あとはファイルの空読みをやってみます。 たいした解説、回答内容じゃないのですが。/* * 1.今回のキッカケ */
VBA系の掲示板 http://www.ken3.org/cgi-bin/bbs/vba/wforum.cgi で、下記の質問をもらいました。 ---- >タイトル:csvファイルの指定した行の表示 > >ホルダーの中にあるCSVファイルで特定のファイルすべての特定の行(数行)だけをエクセルのBOOKに一覧表示したい。 >10001001.1 >10001001.2 >10001001.3 >10001001.dat > . > . > . >上記のようなファイルで.datと付いたファイルすべての指定した行のみを >ファイルごとに一覧にしたいと思っていますが、出来るのでしょうか? ---- さてと、 該当ファイル名の規則は、*.dat あとは、特定の行を抜き出すのかぁ。/* * 2.調べごと、下準備 */
まずは、該当ファイルを取り出さないとね。
Sub FileChk_test() Const strCHKPATH = "E:\Work\" 'データの保管場所 Dim strFILENAME As String 'ファイル名格納用 strFILENAME = Dir(strCHKPATH & "*.dat") 'ファイルのパスとパターンを渡す While strFILENAME <> "" '空文字以外の間ループする MsgBox "取り出したファイル名[" & strFILENAME & "]" strFILENAME = Dir() '引数無しでDir関数を呼び出すと次のファイル名を返す Wend End Sub |
Sub READ_DATA_TEST() Dim nFILENO As Integer 'ファイル番号 Dim strInFileName As String '入力ファイル名 Dim strBUFF As String 'レコードを読みこむバッファ Dim n As Integer 'カウンター変数 strInFileName = "e:\work\0001.dat" 'ファイル名を作る今は固定値だけど 'ファイルの存在チェック If Dir(strInFileName) = "" Then MsgBox strInFileName & "が見つかりません" Exit Sub End If 'ファイルを入力モードで開く nFILENO = FreeFile() '空いているフィル番号を取り出す Open strInFileName For Input As #nFILENO 'ファイルを入力モードで開く '空読みする(行を読み飛ばす) For n = 1 To 4 'テストで4行読み飛ばす Line Input #nFILENO, strBUFF '読み込むが何もしない Next n '数行読み込む For n = 1 To 3 'テストで3行読み込む Line Input #nFILENO, strBUFF 'バッファに読み込む MsgBox "読み込んだデータ" & strBUFF Next n 'ファイルは閉じようね Close #nFILENO End Sub |
Sub FileChk_test() Const strCHKPATH = "E:\Work\" 'データの保管場所 Dim strFILENAME As String 'ファイル名格納用 strFILENAME = Dir(strCHKPATH & "*.dat") 'ファイルのパスとパターンを渡す While strFILENAME <> "" '空文字以外の間ループする MsgBox "取り出したファイル名[" & strFILENAME & "]" strFILENAME = Dir() '引数無しでDir関数を呼び出すと次のファイル名を返す Wend End Sub |
Sub Main_test() Const strCHKPATH = "E:\Work\" 'データの保管場所 Dim strFILENAME As String 'ファイル名格納用 Dim strBOX(3) As String 'データを格納するバッファ strFILENAME = Dir(strCHKPATH & "*.dat") 'ファイルのパスとパターンを渡す While strFILENAME <> "" '空文字以外の間ループする 'データを読み込むサブ関数を呼ぶ 5行目から3行読む Call READ_DATA(strCHKPATH & strFILENAME, 5, 3, strBOX()) 'strBOXにデータが読み込まれているので、それを利用した処理を書く MsgBox "strbox(0)" & strBOX(0) MsgBox "strbox(1)" & strBOX(1) MsgBox "strbox(2)" & strBOX(2) '次のファイル名を取り出す strFILENAME = Dir() '引数無しでDir関数を呼び出すと次のファイル名を返す Wend MsgBox "処理終了" End Sub |
Sub READ_DATA(strInFileName As String, _ nSTART As Integer, _ nREADCNT As Integer, _ strREADBUFF() As String) Dim strBUFF As String 'データ読み込み用のバッファ Dim nFILENO As Integer 'ファイル番号 Dim n As Integer 'カウンター変数 Dim nSETCNT As Integer 'ファイルを入力モードで開く nFILENO = FreeFile() '空いているフィル番号を取り出す Open strInFileName For Input As #nFILENO 'ファイルを入力モードで開く '空読みする(行を読み飛ばす) For n = 1 To nSTART - 1 '開始行数の1つ前まで空読みする If EOF(nFILENO) = True Then Exit For '途中でファイルが終わっていたか? Line Input #nFILENO, strBUFF '読み込むが何もしない Next n '数行分読み込み、バッファにセットする nSETCNT = 0 For n = 1 To nREADCNT '読み込み行数分ループで読み込む If EOF(nFILENO) = True Then Exit For '途中でファイルが終わっていたか? Line Input #nFILENO, strBUFF 'バッファに読み込む strREADBUFF(nSETCNT) = strBUFF 'データをn番目にセット nSETCNT = nSETCNT + 1 'セット位置を+1する Next n 'ファイルは閉じようね Close #nFILENO End Sub |
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
気になったジャンル↓を選択してください。 人気記事(来場者が多いTOP3): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 |
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]