[[20211102112449]] 『vba ファイル  seek 先頭に戻る』(hiro) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『vba ファイル  seek 先頭に戻る』(hiro)

開いているファイルの読み取り位置を先頭行に移動させたいです。

ファイルを読み込んで複数ある検索キーワード読み込んだファイルにあるかないかを調べるコードを記載したのですが、1つの検索ワード調べ終わったあと、次の検索ワードでファイルを調べるため、読み込んだファイルを先頭行にもどしたいのですが、どのようにコードを書いたら良いかわからず困っております。

どなたかご教示お願いします。

Public Sub Sample()

  Dim Buf As String
  Dim STR As String
  Dim Lost_Row As String

  Dim Directory As String

  Dim str1 As String
  Dim str2 As String

  Dim i As Long ' インデックス用の変数

 '最終行を所得

  Lost_Row = Cells(3, 1).End(xlDown).Row
  Debug.Print InputBox(Lost_Row)

Directory = Cells(3, 3).Text

    i = 3

  '検索ワード
  STR = Cells(i, 1)

  Close #1 'デバッグ用

  Open Directory For Input As #1

'データが無くなるまで繰り返す
For i = 3 To Lost_Row

    'ヘッダー行を無視したいため1行目を予め無駄に読み込む
  Line Input #1, Buf

  Do Until EOF(1)
    Line Input #1, Buf

    'Call DecToBin(STR)

        If InStr(Buf, STR) <> 0 Then

          '見つけた時点で終了
          Cells(i, 2) = "○"
          GoTo Continue

          '見つからなかったので次の行
          Else
          Cells(i, 2) = "×"
          'B列に×を記載
        End If
  Loop

Continue:

    'Debug.Print InputBox(i)

'ここで読み込みファイルの先頭行に移動させたいです。
Next

  Close #1

End Sub

< 使用 Excel:Office365、使用 OS:Windows10 >


Openし直せばいいだけでは。
(tkit) 2021/11/02(火) 11:42

 CloseしてOpenし直すのもありですが、
 Seek関数とSeekステートメントがありまして、
 Seek関数で位置を取得して覚えておいて、Seekステートメントでジャンプします。

 Seek関数
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/seek-function

 Seekステートメント
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/seek-statement

 Sub sample()
    Dim fn As Integer
    Dim line As String
    Dim pos As Integer
    fn = FreeFile
    Open "D:\test.txt" For Input As fn
    Line Input #fn, line       ' ヘッダ行1行よみとばし
    pos = Seek(fn)             ' 場所を覚える
    For i = 1 To 2
       Do While Not EOF(fn)
          Line Input #fn, line
          Debug.Print line
       Loop
       Seek fn, pos            ' 覚えておいた場所へジャンプ
    Next
    Close fn
 End Sub
(´・ω・`) 2021/11/02(火) 11:50

 余談ですが、Doループを脱出するのに Goto使ってますが、
 Exit Do というのがあるのでこちらがおすすめです。行ラベルいらないし。
(´・ω・`) 2021/11/02(火) 11:51

tkit様ありがとうございました。
盲点でした。

(´・ω・`)様いつもご助力ありがとうございます。
(hiro) 2021/11/02(火) 11:53


もう見てないかもしれませんが。

■1
[[20211029144240]] 『テキストファイル内の文字列を検索』(hiro)
このトピックは↑の続きですよね。何でトピック分けたのでしょうか?
それぞれに回答ついちゃったら混乱しないのでしょうか?

■2
上記のとおり前のトピックへの回答になるかとおもいますが、せっかく【Excel】VBAを使うのですから

 (1)【シートに】テキストファイルを全部読み込む
 (2)数式でキーワードの有無をチェックする

というアプローチも検討してみてはどうでしょうか?

    Sub 別案()
        Dim ファイルパス As String
        ファイルパス = "C:\Users\tamur\Desktop\555\putty.txt"

        Stop 'ブレークポイントの代わり

        With Worksheets("読み込み")
            .UsedRange.Clear
            With .QueryTables.Add(Connection:="TEXT;" & ファイルパス, Destination:=.Range("A1"))
                .TextFilePlatform = 65001          ' 文字コードを指定
                .RefreshStyle = xlOverwriteCells    ' セルに上書き
                .TextFileStartRow = 2               'データの読込開始行をセット
                .Refresh                            ' データを表示
                .Delete                             ' テキストファイル との接続を解除
            End With
        End With

        With Worksheets("シート1")
            .Range("B2:B" & .Cells(.Rows.Count, "A").End(xlUp).Row).Formula = _
                "=IF(COUNTIF(読み込みシート!A:A,""*""&A2&""*""),""○"",""×"")"
        End With
    End Sub

【得られる結果】

 【読み込み】(テキストファイルを読み込んだシート)
   ____________________A____________________
 1 ショートケーキが食べたいな
 2 アイスボックスにおまんじゅうが入ってます
 3 おせちもよいけどカレーもね!

 【シート1】
   ____A___     __B_
 1 キーワード   有無
 2 アイス        ○
 3 ケーキ        ○
 4 ジュース      ×

(もこな2) 2021/11/03(水) 11:43


(もこな2)様
ありがとうございます。
此方も試させていただきます。
(hiro) 2021/11/04(木) 10:37

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.