iT邦幫忙

0

請問如何利用總表的清單資料來查詢其所處的分表名稱

  • 分享至 

  • xImage

各位大大好,小弟最近在做一個料號清單,想做自動化篩選,但做完總表後遇到一個問題,敘述如下

https://ithelp.ithome.com.tw/upload/images/20200424/20126619IyfVABw2NE.png
如上圖,小弟我製作一個總表包含了一個查詢清單,
想用清單內容(位於G8),來查詢其所處的分表名稱(也就是將查詢結果回傳至K8),

概念流程如下圖

https://ithelp.ithome.com.tw/upload/images/20200424/20126619XpuknmmEsr.png

請問如何使用 VBA 在回傳欄位自動鍵入小弟所希望的程式碼?(輸入資料是下拉式清單的動態資料)

在這之前小弟已經在總表 LIST 出所有表格(廠區)所包含的資料(料號) ,但該總表沒有給資料定義群組名稱,所以無法使用名稱定義來查詢,如圖

https://ithelp.ithome.com.tw/upload/images/20200424/20126619uXnSrG1b4X.png

sadfasae iT邦新手 5 級 ‧ 2020-04-24 15:33:25 檢舉
回應剛剛的問題
sadfasae iT邦新手 5 級 ‧ 2020-04-24 15:33:57 檢舉
我RUN完後下一步該怎做呢 頭現在很痛
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2020-04-24 12:27:18

用 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)),"","廠區二")
看更多先前的回應...收起先前的回應...
sadfasae iT邦新手 5 級 ‧ 2020-04-24 13:10:38 檢舉

但我的問題是,現在做的是一對多查詢,

大大的這作法似乎是將資料分開做 多對多...

sadfasae iT邦新手 5 級 ‧ 2020-04-24 13:11:46 檢舉

我已經有總表將資料LIST出來 ,但問題是 LIST並沒有做群組分類,A1~A9屬於第一個群組只是假設

sadfasae iT邦新手 5 級 ‧ 2020-04-24 13:22:51 檢舉
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欄)來搜尋,但程式好像有錯

https://ithelp.ithome.com.tw/upload/images/20200424/20126619pO9pp4idda.png

sadfasae iT邦新手 5 級 ‧ 2020-04-24 13:47:10 檢舉

我會想這樣做的原因是
** 總表 LIST 是 COPY所有分表 複製貼上的,都是自動程序**,
所以輔助欄做好後也會一併複製貼上到 LIST裡進行更新

並利用VLOOKUP在 總表 的 G8 搜尋欄位 打入

=VLOOKUP(G8, 所有分表所集合成的搜索範圍, 回傳其中所屬的廠區(也就是上面程式RUN出的輔助欄位值), 0)

Sheets(i).Name 是 VBA 的語法
沒法子放進 Excel 的公式裡

ActiveCell.FormulaR1C1 = "= Sheets(i).Name"

改成

ActiveCell.FormulaR1C1 = Sheets(1).Name

看看

sadfasae iT邦新手 5 級 ‧ 2020-04-24 15:29:38 檢舉

恩 謝謝 不好意思我雷了 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裡進行更新

另外
這種做法
在「多於一個廠區有該料號」的情形時
只會抓到第一筆
你可能要考慮這個情形...

sadfasae iT邦新手 5 級 ‧ 2020-04-24 15:35:05 檢舉

https://ithelp.ithome.com.tw/upload/images/20200424/201266190uF6ZhYoO9.png
RUN完結果 順利載入分表的所有廠區到總表 那下一步搜尋該怎 KEY 呢?
我現在頭很痛

sadfasae iT邦新手 5 級 ‧ 2020-04-24 15:35:59 檢舉

對 我有考慮到 所以LIST 材用料號搜尋(因為料號會重複,但廠區部會重複,LIST會過濾重複的資料

其實你都會寫 VBA 了
就不必執著於 VLOOKUP 了

直接拿 G8 去 A 欄 FIND 個幾次
再把 FIND 到的隔壁的值(廠區)填回 K8
就好了

sadfasae iT邦新手 5 級 ‧ 2020-04-24 15:44:16 檢舉

所以 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

我要發表回答

立即登入回答