返回列表 上一主題 發帖

[發問] 搜尋代號後,尋找對應列數的儲存格

[發問] 搜尋代號後,尋找對應列數的儲存格

想請教版上前輩

如希望能在"尋找sheet"中,查詢工作表1中的任一個代號

查詢後:往右搜尋到有數字的儲存格,再去對應的第二列查所屬的編號

舉例:尋找GV8CX3Y00,往右搜尋會發現在N、R、S欄位有數字
對應到所屬的第二列為MM、QQ、RR

想請教前輩有沒有函數或VBA有辦法執行這樣的結果(抓出某代號第二列對應的編號)
因代號欄跟編號列會到上千項,手動查詢已經快無法負荷 感謝

函數唯一想到的只有IF,搜尋<>"",但抓到後要如何使之對應到第三列
是卡關的步驟

搜尋範例.rar (151.65 KB)

(輸入編號12057) google網址:https://hcm19522.blogspot.com/
google"EXCEL迷"  blog  或google網址:https://hcm19522.blogspot.com/

TOP

本帖最後由 Andy2483 於 2023-11-24 15:37 編輯

回復 17# 准提部林


    謝謝論壇,謝謝前輩指導
後學藉此帖學習物件(儲存格)的使用,學習到很多知識,以下是心得註解,請前輩再指導

Option Explicit
Sub FindData()
Dim xR As Range, xA As Range, xF As Range, j%
'↑宣告變數:(xR,xA,xF)是儲存格變數,j是短整數
Set xR = [尋找!a2]
'↑令xR變數是"尋找"表的[A2]儲存格
xR(1, 2).Resize(1, 200) = ""
'↑令xR變數右1格儲存格擴展向右200格範圍儲存格值是空字元
Set xA = Sheets("工作表1").UsedRange
'↑令xA變數是 "工作表1"表有使用儲存格擴展最小方正範圍儲存格
Set xF = xA.Columns(1).Find(xR, Lookat:=xlWhole)
'↑令xF變數是 xA變數第1欄以 Range.Find 方法回傳物件(儲存格),
'亦以xR變數尋找 xA變數第1欄裡值全同的儲存格,回傳給xF變數

If xR = "" Or xF Is Nothing Then Exit Sub
'↑如果xR變數值是空字元 或xF是無物件? True就結束程式執行
For j = 2 To xA.Columns.Count
'↑設順迴圈!j從2 到 xA變數欄數
    If xF(1, j) <> "" Then Set xR = xR(1, 2): xR = xA(2, j)
    '↑如果xF變數第1列j變數欄儲存格值不是空的?
    'True就令R變數是右1格儲存格,令xR變數是xA變數第2列j變數欄儲存格值

Next j
End Sub
學無止境!
或許真相只有一個,但是找尋真相的方法不只一種
謝謝前輩常用不同的方法指導後學
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復  abc9gad2016


    Sheets("成品").[L2].Resize(1, 200) = ""  --> 清除上一次查詢資料

For  ...
samwang 發表於 2021-1-26 17:39



   明白了,感謝S大

TOP

回復 19# abc9gad2016


    Sheets("成品").[L2].Resize(1, 200) = ""  --> 清除上一次查詢資料

For J = 10 To UBound(Arr, 2)
-->因為搜尋範圍為J64:BR64
設定範圍Arr = Range([工作表1!BR64], [工作表1!A65536].End(3))
UBound(Arr, 2) Arr最後一欄 BR

TOP

回復 17# 准提部林


    謝謝版主!

TOP

回復 18# samwang


感謝大大!測試修改成功,想請問這兩段修改比較多,可以請教是什麼意思嗎 謝謝
Sheets("成品").[L2].Resize(1, 200) = ""

For J = 10 To UBound(Arr, 2)

TOP

回復 16# abc9gad2016

請測試看看,謝謝
Sub tt3()
Set xD = CreateObject("Scripting.Dictionary")
Sheets("尋找").[B2].Resize(1, 200) = ""
T = Sheets("尋找").[A2]
xD(T & "") = ""
Arr = Range([工作表1!BR64], [工作表1!A65536].End(3))
For i = 2 To UBound(Arr)
     N = xD(Arr(i, 1) & ""): If N = 0 Then GoTo 99
     For j = 10 To UBound(Arr, 2)
         If Arr(i, j) <> "" Then: M = M + 1: Arr(1, M) = Arr(1, j)
     Next
99:  Next
If M > 0 Then Sheets("尋找").[B2].Resize(1, M) = Arr
End Sub

TOP

Sub FindData()
Dim xR As Range, xA As Range, xF As Range, j%
Set xR = [尋找!a2]
xR(1, 2).Resize(1, 200) = ""
Set xA = Sheets("工作表1").UsedRange
Set xF = xA.Columns(1).Find(xR, Lookat:=xlWhole)
If xR = "" Or xF Is Nothing Then Exit Sub
For j = 2 To xA.Columns.Count
    If xF(1, j) <> "" Then Set xR = xR(1, 2): xR = xA(2, j)
Next j
End Sub

TOP

回復 12# samwang


    不好意思想再請教S大,如果依照這份表格我想搜尋範圍為J64:BR64
不知道我哪邊修改錯還請指點,無法執行出要的結果 謝謝

TOP

        靜思自在 : 成功是優點的發揮,失敗是缺點的累積。
返回列表 上一主題