用 VLOOKUP 查詢是否有該料號(ISNA)
如果 ISNA=TRUE (找不到,顯示空白)
如果 ISNA=FALSE (找到,顯示廠區名稱)
公式如下
A1..A9 是「廠區一」
A10..A19 是「廠區二」
A1=10301-0023
A2=11006-0011
A3=11006-0014
A4=11401-0013
A5=11401-0011
A6=11401-0020
A7=11401-0008
A8=11402-0024
A9=11402-0013
A10=11006-0049
A11=11006-0024
A12=11006-0026
A13=11006-0024
A14=11006-0032
A15=11101-0010
A16=11102-0016
A17=11102-0025
A18=11102-0020
A19=11102-0022
G8=11401-0007 或其他要搜尋的料號
K8=IF(ISNA(VLOOKUP($G$8, A1: A9,1,FALSE)),"","廠區一")
K9=IF(ISNA(VLOOKUP($G$8,A10:A19,1,FALSE)),"","廠區二")
但我的問題是,現在做的是一對多查詢,
大大的這作法似乎是將資料分開做 多對多...
我已經有總表將資料LIST出來 ,但問題是 LIST並沒有做群組分類,A1~A9屬於第一個群組只是假設
Sub 先在每個分表中製作一個輔助欄位,欄位名稱即等於表格名稱(所屬廠區)()
For i = 4 To Sheets.Count
Sheets(i).Activate
Range("C2").Select
Selection.ListObject.ListColumns.Add Position:=3
Columns("C:C").Select
ActiveCell.FormulaR1C1 = "= Sheets(i).Name"
Columns("C:C").Select
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Columns.AutoFit
Columns("C:C").Select
Selection.EntireColumn.Hidden = True
Next
End Sub
我想法是說能不能先在分表中建立輔助欄位(欄位建立在C欄)來搜尋,但程式好像有錯
我會想這樣做的原因是
** 總表 LIST 是 COPY所有分表 複製貼上的,都是自動程序**,
所以輔助欄做好後也會一併複製貼上到 LIST裡進行更新
並利用VLOOKUP在 總表 的 G8 搜尋欄位 打入
=VLOOKUP(G8, 所有分表所集合成的搜索範圍, 回傳其中所屬的廠區(也就是上面程式RUN出的輔助欄位值), 0)
Sheets(i).Name 是 VBA 的語法
沒法子放進 Excel 的公式裡
將
ActiveCell.FormulaR1C1 = "= Sheets(i).Name"
改成
ActiveCell.FormulaR1C1 = Sheets(1).Name
看看
恩 謝謝 不好意思我雷了 XDDD
For i = 4 To Sheets.Count
Sheets(i).Activate
Range("C2").Select
Selection.ListObject.ListColumns.Add Position:=3
Columns("C:C").Select
For J = 2 To Cells(Rows.Count, 1).End(xlUp).Row
Cells(J, 3) = Sheets(i).Name
Next
Next
總表 LIST 是 COPY所有分表 複製貼上的,都是自動程序,
所以輔助欄做好後也會一併複製貼上到 LIST裡進行更新
另外
這種做法
在「多於一個廠區有該料號」的情形時
只會抓到第一筆
你可能要考慮這個情形...
RUN完結果 順利載入分表的所有廠區到總表 那下一步搜尋該怎 KEY 呢?
我現在頭很痛
對 我有考慮到 所以LIST 材用料號搜尋(因為料號會重複,但廠區部會重複,LIST會過濾重複的資料
其實你都會寫 VBA 了
就不必執著於 VLOOKUP 了
直接拿 G8 去 A 欄 FIND 個幾次
再把 FIND 到的隔壁的值(廠區)填回 K8
就好了
所以 FIND含數 在VBA裡面 應該怎用?
因為我暫時只想到 VLOOKUP ,會建立 G8清單 是因為要給其他人員用(他們不會VBA),所以只好人為 案清單的方式 查詢對應廠區,無法自動化
微軟官方範例
拿去改著用
這個範例會在第一張工作表上的 A1:A500 範圍內尋找值為 2 的所有儲存格,並將這些儲存格的值變更為 5。
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set c = .FindNext(c)
Loop While Not c Is Nothing
End If
End With