Excel VBA質問箱 IV

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

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


23248 / 76738 ←次へ | 前へ→

【58859】再帰取得配列データの処理の方法
質問  ON  - 08/11/14(金) 15:00 -

引用なし
パスワード
   こんにちは よろしくお願い致します

APIを使用したファイルの高速検索処理
▼【58198】再帰処理でのファイル検索
tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=58198;id=excel
でお世話になりました


最後のほうに記載のある
kanabunさんの 【58200】Re:再帰処理でのファイル検索 のコードで

Sub Try_Start()

  If n Then
    MsgBox Join(myList, vbCr), , strFind & " ---> " & n & " Files"
  Else
    MsgBox "該当ファイルなし"
  End If

MsgBox Join(myList, vbCr)

Cells(1, 1) = Join(myList, vbCr)
で、シートに一発展開できるので、対象ファイルが600程度あっても
4秒程度で処理が完了なのですが


上記に加えて
1)フォルダの階層が深いのでフルパスではなく指定フォルダ以下のパスに修正
2)特定ブックの時だけ、指定セルから値取得したいと思っています

で、
Cells(1, 1) = Join(myList, vbCr)
の変わりに

    For CNTR = 1 To UBound(myList)
    
    
      'ブックの入力シートのAX69のセルが空値で無ければ、その値を取得
      If IsError(TG_Val_M4(myList(CNTR), "ST1", "AX", 69)) = True Then

      Else
      
        Cells(ROW_CNT, 1) = Left(RE_PATH(myList(CNTR), "\", 8), 7) & "___ " & TG_Val_M4(myList(CNTR), "入力S", "AX", 69)
        ROW_CNT = ROW_CNT + 1
        
      End If

      'ブックのあるフォルダ以下のパス記載
      Cells(ROW_CNT, 1) = RE_PATH(myList(CNTR), "\", 8)
      
      ROW_CNT = ROW_CNT + 1
    
    Next

なんてすると、一機十倍以上の時間が掛かってしまいます

どのような処理にすればよいでしょうか


補足

'シートの AX69 の値取得
Public Function TG_Val_M4(tg_f_path As String, tg_s As String, cn As String, rc As Integer)

TG_Val_M4 = Application.ExecuteExcel4Macro("'" & Left(tg_f_path, InStrRev(tg_f_path, "\")) & _
        "[" & Right(tg_f_path, Len(tg_f_path) - InStrRev(tg_f_path, "\")) & "]" & _
            tg_s & "'!R" & rc & "C" & Columns("" & cn & "").Column)

End Function
'↑下記を後から作成したので・・そのままです・・・

'フルパスを特定のパス以下に変更する
Function RE_PATH(strWords As String, strDelim As String, ori_cnt As Integer)
  
  Dim astrWords() As String
  Dim cnt   As Long
  
  Dim NEW_WD As String
  
  astrWords = Split(strWords, strDelim)
  
  For cnt = ori_cnt To UBound(astrWords)
    NEW_WD = NEW_WD & "\" & astrWords(cnt)
  Next
  
  'RE_PATH2 = NEW_WD
  '最初の\を取り除く
  RE_PATH = Mid(NEW_WD, 2, Len(NEW_WD))
  
End Function


追記
1)フォルダの階層が深いのでフルパスではなく指定フォルダ以下のパスに修正
は、エクセルでの置換機能でもいいと思っていますが

2)特定ブックの時だけ、指定セルから値取得したいと思っています
の処理が必要です

また、
多分、ブックを開かないので Application.ExecuteExcel4Macro が
最速ではないかと思っているのですが、この辺もアドバイスありましたら
よろしくお願い致します
0 hits

【58859】再帰取得配列データの処理の方法 ON 08/11/14(金) 15:00 質問
【58861】Re:再帰取得配列データの処理の方法 kanabun 08/11/14(金) 16:16 発言
【58863】Re:再帰取得配列データの処理の方法 ON 08/11/14(金) 17:55 質問
【58864】Re:再帰取得配列データの処理の方法 kanabun 08/11/14(金) 18:13 発言
【58902】Re:再帰取得配列データの処理の方法 ON 08/11/17(月) 15:09 質問
【58904】Re:再帰取得配列データの処理の方法 kanabun 08/11/17(月) 15:46 発言
【58906】Re:再帰取得配列データの処理の方法 ON 08/11/17(月) 18:07 お礼

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