Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


59528 / 76738 ←次へ | 前へ→

【21897】Re:Seek関数を使いこなすには
発言  ichinose  - 05/2/3(木) 7:47 -

引用なし
パスワード
   umebaind さん、ちゃっぴさん、おはようございます。

>以下のようなプログラムを作りSEEK関数を利用して
>ファイルから検索している文字が見つかれば
>新たに検索する文字を入れ替え
>見つかった行のその次の行から検索し処理を
>短時間で終了させるような事をやりたいのですが
><<<このPGの本体とも言うべきプログラムは約25万件の処理を
>行う為>>>
処理時間を短くする方法は、ちゃっぴさんの投稿にもありましたが、
一回の読込で複数行読み込んでしまう方法があるとは思います。
(アルゴリズムに工夫が必要ですが)。
でも、その前にumebaind さんが投稿されたコードで
1行づつ読み込んだ手法で正常に動作するコードを作ってみてはいかがですか?

見せていただいた限りでは、
SEEK関数及び、SEEKステートメントを使用する意味が私には
わかりませんでした。
入力データもご提示されているので
再現しやすいご質問なのですが、
ご希望の結果も記述されるともっとよかったと思いますよ!!

>Sub FSEEK()
>'MsgBox "引数=" & Mails
>  Dim s As String
>  Dim MyArray
>  Dim d
>  s = CurDir          'カレントフォルダを取得する
>  MyArray = Split(s, "\", -1) 'カレントフォルダを"¥"で分割する
>  'カレントフォルダを再構成する
>  s = MyArray(0) & "\" & MyArray(1) & "\" & MyArray(2) & "\" & "デスクトップ\ファイルシーク"
>  
>  ChDir s           'カレントフォルダを変更する
>  Dim strFILENAME2 As String
>  strFILENAME2 = s & "\FILESEEK2.txt"
>
>  Dim strREC 'オーバーフローの為
>  
>  Dim setlist As Variant     'SPLITの戻り値はバリアント型の為
>  Dim n, comt, counter
> 
>  'strFILENAME2 = s & "\FILESEEK2.txt"
>  Dim intFileno As Integer
>  Dim i
>  Dim jjj As Variant
>  Dim uuu As Long
>  Dim dse, A1, A2 As String
>  Open strFILENAME2 For Input As #1
>  Dim strtest
>  Dim ddd As String
>  Dim FPos As Long
>  
>  counter = 0
>  i = 1
>  Do Until EOF(1)
>    
>    Line Input #1, strREC
    debug.print strrec
'   として、Seekステートメントが実行された
'   直後の「strREC」の中身を確認して下さい
'   たぶん、umebaind さんが意図している内容とは違うと思います
>    
>    jjj = Split(strREC, ",")
>    dse = jjj(1)
>
>A1 = "6columsyori"
>A2 = "12columsyori"
'↑これは、ここにあると
'常に"6columsyori"を調査してしまいますよね
'これは、たぶん、わかってらしてやっているとは思いますが・・・。

>
'     カンマ区切りの2列目のデータのみ検索する仕様でよいのですか?
>    If StrComp(dse, A1) = 0 Then
>      
>      MsgBox i & "行目" & "で見つかりました!" & A1 & "行目の処理:" & Loc(1)
>    
>      FPos = Seek(1)
>      MsgBox FPos & "⇔本当の現在位置"
>      
>      A1 = ""
>      A1 = A2 '処理の入れ替え
>      Seek #1, FPos + 1 '見つかった位置から検索する
>    
>    End If
>    i = i + 1
>   
>  Loop
>  
>'
>  Close #intFileno
>
>
>End Sub

仕様が

>ファイルから検索している文字が見つかれば
>新たに検索する文字を入れ替え
>見つかった行のその次の行から検索し処理

であれば、SEEKステートメントの処理は不要だと思いますが・・・。
一行読み込んだ時点でカレントポインタは、次の行の先頭に
なっていますから・・・。

0 hits

【21889】Seek関数を使いこなすには umebaind 05/2/2(水) 20:17 発言
【21892】Re:Seek関数を使いこなすには ちゃっぴ 05/2/2(水) 20:51 回答
【21897】Re:Seek関数を使いこなすには ichinose 05/2/3(木) 7:47 発言

59528 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free