返回列表 上一主題 發帖

[發問] 只想要抓取符合條件的"第一筆"其他不要

[發問] 只想要抓取符合條件的"第一筆"其他不要

各位高手前輩~
拼拼湊湊弄了下面的程式碼,可以滿足到目前的需求~但是執行速度好慢~
目前可以修正我的程式碼~用更好的方式調整嗎?

我想要將  符合我給的條件 去 A row尋找
找到符合我要的值時,就往上搜索到符合條件的欄位,把這個欄位的值 抓走
可是我只要抓符合條件的第一筆資料,其他的不要~
就這樣,我用了錄製聚集的方式~~傻傻地完成了
可是這不是我想要的速度~好慢喔
有機會調整嗎?懇求指點一二

有想過丟到陣列去~但目前還不會如何去陣列搜索符合我要的第一筆資料~因為會有很多筆類似
懇求指點一二
聽同學說~~方法很多種~但我還沒有開竅 ORZ:'(

Sub TEST ()
Dim zz As String

For i = 2 To Cells(Rows.Count, 10).End(xlUp).Row
    zz = Cells(i, 10).Value
    Columns("A:A").Select

    Selection.Find(What:=zz, after:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate

    Cells.Find(What:="  (net ", after:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _
        MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate

    Cells(i, 11) = ActiveCell
    Cells(i, 11) = Right(Cells(i, 11), Len(Cells(i, 11)) - 7)

  Next
  Cells(1, 10).Select


End Sub

回復 19# boblovejoyce


    只是個人邏輯思考喜好,以及要設定 下限為1的陣列不必每個 分別定義 "1 to ...."
在使用上要注意的是 Excel 某些產生陣列的函數不受影響,碰到過,但忘記了

2010 VBA 說明 "Array 函數所建立的陣列預設下限必為零,不受 Option Base 所影響" ,好像是錯誤的。

TOP

回復 16# Scott090
Option Base 1
宣告起始陣列從1開始
它的好處或是使用上 有什麼特別之處?

TOP

回復 16# Scott090
剛剛測試完畢~大大的又更神速了~感謝大大指導

TOP

回復 16# Scott090
@@ 明天去測試一下
現在只有手機可用
現謝過了,之後再來回報和問問題

TOP

回復 7# boblovejoyce

如果使用  陣列操作, 在我的電腦只要 0.324秒;只做參考:
  1. Option Base 1

  2. Sub test1()
  3. t = Timer
  4. Dim arr, arr1, arr2
  5. Dim i&, j&, k&
  6. arr1 = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
  7. arr = Range("J2:J" & Cells(Rows.Count, 10).End(xlUp).Row)
  8. ReDim arr2(UBound(arr), 1)
  9. For i = 1 To UBound(arr)
  10.     For j = UBound(arr1) To 1 Step -1
  11.         If InStr(arr1(j, 1), arr(i, 1)) <> 0 Then
  12.             For k = j To 1 Step -1
  13.                 If InStr(arr1(k, 1), "  (net ") <> 0 Then
  14.                     arr2(i, 1) = Right(arr1(k, 1), Len(arr1(k, 1)) - 7) '    '²¾°£«e±8Ó¦r¤¸
  15.                     GoTo Nexti
  16.                 End If
  17.             Next
  18.         End If
  19.     Next
  20. Nexti:
  21.   Next
  22.    Range("L2").Resize(UBound(arr2)) = arr2
  23. MsgBox Format(Timer - t, "0.0000")
  24. End Sub
複製代碼

TOP

感謝兩位說明
我懂了

Ok,我再去讀說明一下

TOP

回復 12# boblovejoyce

如版大的回答,需要那麼多逗點,是省略參數或默認預設值,最後的2則是XlSearchDirection的值如下說明,它可以用名稱或值表示之
名稱               值         描述
xlNext            1    搜尋範圍中的下一個符合值。
xlPrevious     2     搜尋範圍中的上一個符合值。

TOP

回復 12# boblovejoyce
沒有指明參數名稱,,,點出參數位置。
請看VBA中 Find 的說明
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 9# lpk187

親愛的 lpk187大大
    Set zz = Rng.Find(ar, , , , , 2)
    Set aa = Rng.Find("  (net ", Range(zz.Address), , , , 2)

我想問一下一個概念 為什麼需要這麼多 ,,,,, 逗號
要分隔什麼?什麼意思
請指引給小弟一個觀念?or 有相關訊息我去爬文查找?
感謝你

TOP

        靜思自在 : 要批評別人時,先想想自己是否完美無缺。
返回列表 上一主題