[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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 >
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
(´・ω・`)様いつもご助力ありがとうございます。
(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
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.