Board logo

標題: [發問] Excel抓取多筆資料 [打印本頁]

作者: cowww    時間: 2023-6-25 13:08     標題: Excel抓取多筆資料

最近長官問我在報表上面的排程異動只能看一筆異動嗎?
有沒有辦法連後續的異動都一起帶出來
[attach]36638[/attach]
[attach]36639[/attach]

我想了很久,完全不知道要怎麼把後續的異動放進去
目前想到的方法就是點選樞紐表後出現的樣式
[attach]36640[/attach]
[attach]36641[/attach]

論壇的大大們
小弟想請求兩件事情幫忙
(一)如何呈現出點選樞紐表後出現的樣式
(二)關於長官的要求是否有更好的表現方式

[attach]36642[/attach]
作者: Andy2483    時間: 2023-6-26 08:30

本帖最後由 Andy2483 於 2023-6-26 08:35 編輯

回復 1# cowww


    謝謝前輩發表此主題與範例
後學建議
1.以註解方式呈現 後續的異動,如下圖

[attach]36645[/attach]


PS:如果長官使用的螢幕夠大也可分割畫面呈現
作者: cowww    時間: 2023-6-26 11:55

回復 2# Andy2483

非常感謝Andy2483大大的解惑
這樣的方法我有想過,但不可能一筆一筆這樣貼上去,太浪費時間了

還是說可以用公式或VBA完成註解的方式??

PS:長官使用NB
作者: Andy2483    時間: 2023-6-26 15:46

回復 3# cowww


    謝謝前輩回復
後學藉此帖練習陣列.字典與註解,學習方案如下,請前輩參考

執行結果:
[attach]36650[/attach]


Option Explicit
Sub TEST()
Application.ScreenUpdating = False
Dim Brr, Crr, Z, i&, T$, PH$, FN$, xB As Workbook, Sh As Worksheet
Set Z = CreateObject("Scripting.Dictionary")
PH = ThisWorkbook.Path: FN = "異動表排序.xlsm"
On Error Resume Next
Set xB = Workbooks(FN): Set Sh = xB.Sheets("異動表排序")
Brr = Range(Sh.[E1], Sh.[A65536].End(3))
On Error GoTo 0
If xB Is Nothing Then
   Set xB = Workbooks.Open(PH & "\" & FN)
   Brr = Range([異動表排序!E1], [異動表排序!A65536].End(3))
   xB.Close 0
End If
For i = 1 To UBound(Brr)
   T = Brr(i, 2): If T = "" Then GoTo i00
   If Z(T) = "" Then
      Z(T) = Brr(i, 3) & " █ " & Brr(i, 4)
      Else
         Z(T) = Z(T) & vbLf & Brr(i, 3) & " █ " & Brr(i, 4)
   End If
i00: Next
Brr = Range([專案!D1], [專案!D65536].End(3))
[D:D].ClearComments
For i = 1 To UBound(Brr)
   If Brr(i, 1) = "" Or Z(Brr(i, 1) & "") = "" Then GoTo i01
   Cells(i, 4).AddComment
   Cells(i, 4).Comment.Text Text:=Z(Brr(i, 1) & "")
   Cells(i, 4).Comment.Shape.TextFrame.Characters.Font.Size = 16
   Cells(i, 4).Comment.Shape.DrawingObject.AutoSize = True
i01: Next
Set Z = Nothing: Erase Brr: Set xB = Nothing: Set Sh = Nothing
End Sub
作者: cowww    時間: 2023-6-26 16:12

回復 4# Andy2483

大大您真是太強了
我先做出來給主管看看他能不能接受這樣的表示方式

非常感謝Andy2483大大的解惑
作者: Andy2483    時間: 2023-6-27 08:00

謝謝論壇,謝謝各位前輩
後學藉此帖複習昨天的學習方案,方案學習心得註解如下,請各位前輩指教

Option Explicit
Sub TEST()
Application.ScreenUpdating = False
'↑令螢幕暫不隨著程序做變化
Dim Brr, Z, i&, T$, PH$, FN$, xB As Workbook, Sh As Worksheet
'↑宣告變數($是字串變數,&是長整數,沒有符號的是通用型變數)
Set Z = CreateObject("Scripting.Dictionary")
'↑令Z變數是 字典
PH = ThisWorkbook.Path: FN = "異動表排序.xlsm"
'↑令PH變數是 本檔資料夾位址,令FN變數是 指定檔名(資料表)
On Error Resume Next
'↑令程序暫遇到錯誤就繼續執行下個程序,不要停下來排錯
Set xB = Workbooks(FN): Set Sh = xB.Sheets("異動表排序")
'↑令xB變數是 活頁簿("異動表排序.xlsm"),令Sh變數是其工作表
Brr = Range(Sh.[E1], Sh.[A65536].End(3))
'↑令Brr變數是 二維陣列,以A~E欄儲存格值帶入陣列中
On Error GoTo 0
'↑令程序恢復遇到錯誤就停下來排錯
'這段不排錯的程序是為了 "異動表排序.xlsm"被開啟的情境下,
'讓Brr可以裝進陣列值
'如果檔案沒有被開啟的情況,程序就會跳過這些程序,繼續下行

If xB Is Nothing Then
'↑如果xB變數還沒有裝入活頁簿("異動表排序.xlsm")??
   Set xB = Workbooks.Open(PH & "\" & FN)
   '↑令開啟指定路徑下的檔案,並令xB變數是此活頁簿
   Brr = Range([異動表排序!E1], [異動表排序!A65536].End(3))
   '↑令Brr變數是 二維陣列,以A~E欄儲存格值帶入陣列中
   xB.Close 0
   '↑令活頁簿不存檔關閉
End If
For i = 1 To UBound(Brr)
'↑設順迴圈
   T = Brr(i, 2): If T = "" Then GoTo i00
   '↑令T變數是 迴圈列第2欄Brr陣列值,如果T變數是空的!
   '是就跳到標示i00位置繼續執行

   If Z(T) = "" Then
   '↑如果以T變數查Z字典得item值是空字元?
      Z(T) = Brr(i, 3) & " █ " & Brr(i, 4)
      '↑是就令在Z字典裡的T變數key 的item換成新字串
      '新字串:迴圈列第3欄Brr陣列值連接 " █ "再連接 迴圈列第4欄Brr陣列值,
      '成為新字串,放回Z字典裡

      Else
         Z(T) = Z(T) & vbLf & Brr(i, 3) & " █ " & Brr(i, 4)
         '↑否則(T變數key 的item值已經有字串!)
         '令item連接換行再連接 迴圈列第3欄Brr陣列值連接 " █ "再連接
         '迴圈列第4欄Brr陣列值成為新字串,放回Z字典裡

   End If
i00: Next
Brr = Range([專案!D1], [專案!D65536].End(3))
'↑令Brr變數換裝結果表的D欄儲存格值,依然是 二維陣列
'PS:Brr宣告是通用型變數,可以任意=換裝資料 或Set Brr = 物件

[D:D].ClearComments
'↑令D欄的註解清除
For i = 1 To UBound(Brr)
'↑設順迴圈
   If Brr(i, 1) = "" Or Z(Brr(i, 1) & "") = "" Then GoTo i01
   '↑排除空格或字典裡item是空字元的項目,跳到標示i01位置繼續執行
   Cells(i, 4).AddComment
   '↑令i迴圈數列D欄儲存格插入註解
   Cells(i, 4).Comment.Text Text:=Z(Brr(i, 1) & "")
   '↑令i迴圈數列D欄儲存格的註解文字是 迴圈Brr陣列值查Z字典得item值
   Cells(i, 4).Comment.Shape.TextFrame.Characters.Font.Size = 16
   '↑令i迴圈數列D欄儲存格的註解文字大小為 16
   Cells(i, 4).Comment.Shape.DrawingObject.AutoSize = True
   '↑令i迴圈數列D欄儲存格的註解框自動縮放
i01: Next
Set Z = Nothing: Erase Brr: Set xB = Nothing: Set Sh = Nothing
'↑令釋放變數
End Sub
作者: cowww    時間: 2023-6-27 08:23

回復 2# Andy2483

非常感謝Andy2483大大的解惑

長管說他比較喜歡備註那張圖表的方式
希望備註的地方可以改放在機台那個欄位
[attach]36651[/attach]
作者: Andy2483    時間: 2023-6-27 08:27

回復 7# cowww


    都註解了! 請自己試改看看囉,一起學習
作者: cowww    時間: 2023-6-27 08:41

回復 6# Andy2483

求救Andy2483大大
[attach]36652[/attach]
[attach]36654[/attach]

我有將資料夾的路徑改成以下的寫法
不知道是不是因為這樣導致無法執行
PH = "\\shl-group.com\dept\MFMG\對外單位開放資料\會議室模具追蹤資訊\備份": FN = "勿刪急件公式.xlsm"
作者: Andy2483    時間: 2023-6-27 09:15

回復 9# cowww

求救也沒用
遠水救不了
自己的環境自己才能試,多試幾次吧
作者: Andy2483    時間: 2023-6-27 09:41

回復 7# cowww


    是這種樣式嗎?

[attach]36655[/attach]
作者: cowww    時間: 2023-6-27 09:47

回復 10# Andy2483

非常感謝Andy2483大大的解惑

我試出來了
長官的要求目前有遇到報表跟異動表內容的表示內容不同
無法做為Key的問題
作者: cowww    時間: 2023-6-27 09:51

回復 11# Andy2483

非常感謝Andy2483大大的解惑

這看起來像長管想要的
作者: Andy2483    時間: 2023-6-27 09:55

本帖最後由 Andy2483 於 2023-6-27 09:59 編輯

回復 13# cowww


   
加個星號
[attach]36656[/attach]

[attach]36657[/attach]
作者: cowww    時間: 2023-6-27 10:10

回復 14# Andy2483

水喔
Andy2483大大真是厲害
作者: Andy2483    時間: 2023-6-27 10:40

回復 15# cowww

檢查簡化了一下,學習方案如下,請前輩參考

    Option Explicit
Sub TEST_1()
Application.ScreenUpdating = False
Dim Brr, Z, A, B, i&, R&, T$, T1$, PH$, FN$, xB As Workbook, Sh As Worksheet
Set Z = CreateObject("Scripting.Dictionary")
PH = ThisWorkbook.Path: FN = "異動表排序.xlsm"
On Error Resume Next
Set xB = Workbooks(FN): Set Sh = xB.Sheets("異動表排序")
Brr = Range(Sh.[E1], Sh.[A65536].End(3))
On Error GoTo 0
If xB Is Nothing Then
   Set xB = Workbooks.Open(PH & "\" & FN)
   Brr = Range([異動表排序!E1], [異動表排序!A65536].End(3))
   xB.Close 0
End If
For i = 1 To UBound(Brr)
   T = Brr(i, 2): If T = "" Then GoTo i00
   T1 = Brr(i, 1): A = Z(T1)
   If A = "" Then
      For R = i To UBound(Brr)
         If T1 <> Brr(R, 1) Then Z(T1) = A: Exit For
         B = "   " & Brr(R, 2) & " " & Brr(R, 3) & " " & Brr(R, 4) & " " & Brr(R, 5)
         If i = R Then A = Brr(R, 1) & vbLf & B Else A = A & vbLf & B
      Next
   End If
   If Z(T) = "" Then
      Z(T) = Z(T1)
      ElseIf InStr(Z(T), Z(T1)) = 0 Then
         Z(T) = Z(T) & vbLf & vbLf & Z(T1)
   End If
i00: Next
Brr = Range([專案!D1], [專案!D65536].End(3))
[V:V].ClearComments
For i = 1 To UBound(Brr)
   T1 = Brr(i, 1): If T1 = "" Or Z(T1) = "" Then GoTo i01
   With Cells(i, 22).AddComment
      .Text Text:=Replace(Z(T1), "   " & T1, "★" & T1)
      .Shape.TextFrame.Characters.Font.Size = 16
      .Shape.DrawingObject.AutoSize = True
   End With
i01: Next
Set Z = Nothing: Erase Brr: Set xB = Nothing: Set Sh = Nothing
End Sub
作者: cowww    時間: 2023-6-27 13:17

回復 16# Andy2483

非常感謝Andy2483大大的解惑
作者: cowww    時間: 2023-7-4 14:48

回復 16# Andy2483

請求Andy2483大大的解惑
"★"消失了,請問我改的語法哪裡出錯了?
[attach]36674[/attach]

Option Explicit
Sub 按鈕22_Click()

Application.ScreenUpdating = False
Dim Brr, Z, A, B, i&, R&, T$, T1$, PH$, FN$, xB As Workbook, Sh As Worksheet
Set Z = CreateObject("Scripting.Dictionary")
PH = ThisWorkbook.Path: FN = "勿刪急件公式.xlsm"
On Error Resume Next
Set xB = Workbooks(FN): Set Sh = xB.Sheets("異動表排序")
Brr = Range(Sh.[E1], Sh.[A65536].End(3))
On Error GoTo 0
If xB Is Nothing Then
   Set xB = Workbooks.Open(PH & "\" & FN)
   Brr = Range([異動表排序!E1], [異動表排序!A65536].End(3))
   xB.Close 0
End If
For i = 1 To UBound(Brr)
   T = Brr(i, 1): If T = "" Then GoTo i00
   T1 = Brr(i, 1): A = Z(T1)
   If A = "" Then
      For R = i To UBound(Brr)
         If T1 <> Brr(R, 1) Then Z(T1) = A: Exit For
         B = "   " & Brr(R, 2) & " " & Brr(R, 3) & " " & Brr(R, 4) & " " & Brr(R, 5)
         If i = R Then A = Brr(R, 1) & vbLf & B Else A = A & vbLf & B
      Next
   End If
   If Z(T) = "" Then
      Z(T) = Z(T1)
      ElseIf InStr(Z(T), Z(T1)) = 0 Then
         Z(T) = Z(T) & vbLf & vbLf & Z(T1)
   End If
i00: Next
Brr = Range([專案!Z1], [專案!Z65536].End(3))
[Z:Z].ClearComments
For i = 1 To UBound(Brr)
   T1 = Brr(i, 1): If T1 = "" Or Z(T1) = "" Then GoTo i01
   With Cells(i, 26).AddComment
      .Text Text:=Replace(Z(T1), "   " & T1, "★" & T1)
      .Shape.TextFrame.Characters.Font.Size = 16
      .Shape.DrawingObject.AutoSize = True
   End With
i01: Next
Set Z = Nothing: Erase Brr: Set xB = Nothing: Set Sh = Nothing


End Sub
作者: qaqa3296    時間: 2023-7-4 20:19

回復 18# cowww

大家一起學習,我在想

Brr = Range([專案!Z1], [專案!Z65536].End(3))

這個是比對"Tool No.",有相同才加星

所以是
Brr = Range([專案!E1], [專案!E65536].End(3))

另外我想問Andy2483大大

"異動表排序"會少最後一筆資料,該如何修正,我看迴圈都有跑滿,但是會少最後一筆(沒有任何備註),程度不夠無法修正此問題
作者: Andy2483    時間: 2023-7-5 07:39

回復 18# cowww


    謝謝前輩回復
查看了示意圖已經與原範例需求結果不同,請上傳新範例

不同處:
[attach]36675[/attach]
作者: Andy2483    時間: 2023-7-5 07:47

回復 19# qaqa3296

"異動表排序"會少最後一筆資料,該如何修正,我看迴圈都有跑滿,但是會少最後一筆(沒有任何備註)

    謝謝前輩一起學習,待cowww上傳新情境範例後,後學再試解看看,屆時再一起討論學習
作者: qaqa3296    時間: 2023-7-7 22:35

回復 21# Andy2483

cowww大大沒有再提供檔案,所以只好由我先發問了

1.
我跟他都是使用Andy2483 16樓的程式碼,所以他可能也有相同問題,只是他沒有發現?會缺一個註解沒有列出

我直接附上說明圖片
[attach]36685[/attach][attach]36686[/attach]

2.    第二個問題
Brr = Range([專案!D1], [專案!D65536].End(3))

這行如果要修改成,程式自己判斷今天日期的月份,假設是"7月"就去找"7月"的工作表,該如何修改?
  
我是直接

currentMonth = Format(Date, "m月")
'    '取今天月份資料

    Brr = Range(["[" currentMonth"]" !D1], ["[" currentMonth"]"!D65536].End(3))

完全不給過...底下又有For i = 1 To UBound(Brr)迴圈,功力不夠想不出來如何修改,希望有人可以幫忙解答

附上測試檔案由cowww提供的檔案+Andy2483 16樓的程式碼修改
[attach]36684[/attach]
作者: Andy2483    時間: 2023-7-8 09:14

本帖最後由 Andy2483 於 2023-7-8 09:21 編輯

回復 22# qaqa3296


    謝謝前輩
使用16樓的程式碼,會缺一個註解沒有列出!!

請將 Brr = Range(Sh.[E1], Sh.[A65536].End(3))
改為Brr = Range(Sh.[E1], Sh.[A65536].End(3)(2))

請將 Brr = Range([異動表排序!E1], [異動表排序!A65536].End(3))
改為 Brr = Range([異動表排序!E1], [異動表排序!A65536].End(3)(2))

這是初學者才會犯的錯,後學沒有做到觀前顧後
有逐列不同值比較時一定要考慮到最後有效列沒有與下一列作比較
作者: Andy2483    時間: 2023-7-8 09:57

本帖最後由 Andy2483 於 2023-7-8 10:05 編輯

回復 22# qaqa3296

謝謝前輩
2.第二個問題
Brr = Range([專案!D1], [專案!D65536].End(3))
這行如果要修改成,程式自己判斷今天日期的月份,假設是"7月"就去找"7月"的工作表,該如何修改?
後學建議如下:
Application.Goto Sheets(Format(Date, "m月")).[A1]
Brr = Range([D1], [D65536].End(3))

這是儲存格游標跳到 今天月份工作表, 再框列當下工作表的儲存格到Brr陣列的方法
作者: 准提部林    時間: 2023-7-8 14:55

使用[陣列]做上/下行比對,
資料範圍須多加一行,
但迴圈要減一, for i=2 to ubound(arr) - 1, 不然會跳出錯誤

若使用range則無此問題!!!
作者: Andy2483    時間: 2023-7-8 15:15

回復 25# 准提部林


    謝謝前輩提攜
作者: cowww    時間: 2023-7-8 16:15

回復 20# Andy2483

真是抱歉
上禮拜家裡有事情,所以都只上半天班
由於每個單位使用的機台號碼樣式都不一樣,最後統一選擇使用A欄位的機台號碼樣式
[attach]36689[/attach]

新的檔案
[attach]36690[/attach]
作者: Andy2483    時間: 2023-7-8 16:37

回復 22# qaqa3296


    qaqa3296前輩的範例裡有很詳細的心得註解,勤學的程度不輸Andy,邀請前輩研究27樓範例情境,與 cowww前輩研討解決方案
後學有點事要忙
作者: qaqa3296    時間: 2023-7-8 22:45

本帖最後由 qaqa3296 於 2023-7-8 22:55 編輯

回復 27# cowww

抱歉"異動表排序"文件792行有"#VALUE"的錯誤訊息,功力不足無法排除錯誤,導致程式會卡住,所以我手動刪除了那行

新的檔案看過之後,都是欄位改變,所以修正一些位置範圍,並修正了最後一筆不顯示問題,看看是不是你想要的顯示效果

至於你的異動表排序文件多了B、C欄,不知用途,所以略過了

剛剛發現我在改範圍時,備註沒有修改,所以跟程式的實際範圍有些不同,如需看備註學習時,請自行修改備註範圍

附上檔案
作者: qaqa3296    時間: 2023-7-9 09:08

本帖最後由 qaqa3296 於 2023-7-9 09:11 編輯

回復 27# cowww

突然想到遇到錯誤就加個跳過錯誤就好

On Error Resume Next

附上加上略過錯誤後的檔案
作者: 准提部林    時間: 2023-7-9 10:14

異動表排序//B欄公式...可參考
=-LOOKUP(,-MID(C1&"|0",LOOKUP(99,FIND({"|","#","#M","#AL"},C1&"|")+{1,1,2,3}),ROW($1:$9)))
沒有符合的顯示0

A欄公式因版本看不到~~
作者: 准提部林    時間: 2023-7-9 10:20

本帖最後由 准提部林 於 2023-7-9 10:30 編輯

來源檔判斷是否開啟//
On Error Resume Next: Set xB = Workbooks(FN): On Error GoTo 0
If xB Is Nothing Then Set xB = Workbooks.Open(PH & "\" & FN): chk = 1
With xB.Sheets("異動表排序")
     Brr = Range(.[G1], .[A65536].End(3)(2))
End With
If chk = 1 Then xB.Close 0

解析//檔案若是事先手動開啟, 不關閉// 若是由程式開啟, 則由程式關閉
為何:
1) 檔案如已開啟, 程式就不可以再開一次, 會造成當機
2) 檔案是手動開啟的, 可能有更改內容而未存檔, 若直接關閉它, 資料將不會被儲存
作者: cowww    時間: 2023-7-10 07:56

回復 30# qaqa3296

非常感謝qaqa3296大大的解惑
作者: cowww    時間: 2023-7-10 07:56

回復 31# 准提部林

非常感謝准提部林大大的解惑
作者: cowww    時間: 2023-7-10 09:12

回復 31# 准提部林

非常感謝准提部林大大的解惑
A欄位的公式
如果B欄位有以下的內容就在前面加入指定的文字
AL#>>前面加入SML-,"M01""M02""M03">>前面加入SML5#
1~15+18+57+21~47+53+49~95+85+58+121~125+164~169+178~179>>前面加入SML3#
96~120>>前面加入PMP#
19+126~128+134~141+183~189>>前面加入SML5#
142~163+181+182>>前面加入SML6#
173~176+180>>前面加入SML7#

=IF(ISNUMBER(SEARCH("AL#",B1)),"SML-"&B1,IF(OR(B1="M01",B1="M02",B1="M03"),"SML5#"&B1,IF(ISNUMBER(B1),
IF(OR(B1=1,B1=2,B1=3,B1=4,B1=5,B1=6,B1=7,B1=8,B1=9,B1=10,B1=11,B1=12,B1=13,B1=14,B1=15,B1=18,B1=57,(B1>=21)*(B1<=47),B1=53,(B1>=49)*(B1<=95),B1=85,B1=58,(B1>=121)*(B1<=125),(B1>=164)*(B1<=169),(B1>=178)*(B1<=179)),
"SML3#"&TEXT(B1,"000"),
IF(AND(B1>=96,B1<=120),
"PMP#"&TEXT(B1,"000"),
IF(OR(B1=19,(B1>=126)*(B1<=128),(B1>=134)*(B1<=141),(B1>=183)*(B1<=189)),
"SML5#"&TEXT(B1,"000"),
IF(OR((B1>=142)*(B1<=163),B1=181,B1=182),
"SML6#"&TEXT(B1,"000"),
IF(OR((B1>=173)*(B1<=176),B1=180),
"SML7#"&TEXT(B1,"000"),
""
)
)
)
)
),
""
)))
作者: Andy2483    時間: 2023-7-10 10:48

本帖最後由 Andy2483 於 2023-7-10 11:16 編輯

回復 32# 准提部林
回復 30# qaqa3296
回復 27# cowww


    謝謝前輩再提供新範例
謝謝 准提部林前輩指導
謝謝 qaqa3296 一起學習,超認真的學習方案
後學也提供學習方案建議如下,請前輩參考

執行結果:
[attach]36693[/attach]

[attach]36694[/attach]


Option Explicit
Sub 機台排程_Click()
Application.ScreenUpdating = False
Dim Brr, Z, A$, B$, C%, Nm&, chk, Np, i&, R&, T$, T1$, PH$, FN$, xB As Workbook, Sh As Worksheet
Set Z = CreateObject("Scripting.Dictionary")
PH = ThisWorkbook.Path: FN = "異動表排序.xlsm"
On Error Resume Next: Set xB = Workbooks(FN): On Error GoTo 0
If xB Is Nothing Then Set xB = Workbooks.Open(PH & "\" & FN): chk = 1
With xB.Sheets("異動表排序")
     Brr = Range(.[G1], .[A65536].End(3)(2))
End With
If chk = 1 Then xB.Close 0
For i = 2 To UBound(Brr) - 1
   If IsError(Brr(i, 1)) Or IsError(Brr(i, 2)) Or Brr(i, 4) = "" Then GoTo i00
   '↑1.2欄有錯誤值 或無模具號碼 略過
   T = Brr(i, 4): T1 = Brr(i, 1): A = Z(T1)
   If A = "" Then
      For R = i To UBound(Brr)
         If IsError(Brr(R, 1)) Or IsError(Brr(R, 2)) Or Brr(R, 4) = "" Then GoTo R00
         '↑1.2欄有錯誤值 或無模具號碼 略過
         If T1 <> Brr(R, 1) Then Exit For
         For C = 4 To 7: B = B & " " & Brr(R, C): Next:
         B = Brr(R, 3) & "       " & B
         If i = R Then A = Brr(R, 1) & vbLf & B Else A = A & vbLf & B
         Z(T1) = A: B = ""
R00:  Next
   End If
   If Z(T) = "" Then
      Z(T) = Z(T1)
      ElseIf InStr(Z(T), Z(T1)) = 0 Then
         Z(T) = Z(T) & vbLf & vbLf & Z(T1)
   End If
i00: Next
Brr = Range([專案!Z1], [專案!D65536].End(3))
[Z:Z].ClearComments: [Z:Z].Interior.ColorIndex = xlNone
For i = 1 To UBound(Brr)
   T1 = Brr(i, 1)
   If Z(T1) = "" And Z(Brr(i, 23)) <> "" Then
      Cells(i, 26).Interior.ColorIndex = 38
      Np = Np + 1: GoTo i01
   End If
   If T1 = "" Or Z(T1) = "" Then GoTo i01
   If Cells(i, 26) = "" Then
      Nm = Nm + 1
      Cells(i, 26).Interior.ColorIndex = 6
   End If
   With Cells(i, 26).AddComment
      .Text Text:=Replace(Z(T1), "        " & T1, "_★_" & T1)
      .Shape.TextFrame.Characters.Font.Size = 16
      .Shape.DrawingObject.AutoSize = True
   End With
i01: Next
If Nm + Np > 0 Then
   MsgBox "有排程 無標示機台: " & Nm & " 個" & vbLf & vbLf & _
          "有標示機台 無排程: " & Np & " 個"
End If
Set Z = Nothing: Erase Brr: Set xB = Nothing: Set Sh = Nothing
End Sub
作者: cowww    時間: 2023-7-10 13:15

回復 36# Andy2483

非常感謝Andy2483大大的解惑
作者: Andy2483    時間: 2023-7-10 13:43

本帖最後由 Andy2483 於 2023-7-10 13:44 編輯

回復 35# cowww


    後學猜測前方所加入的應該是機台廠牌/型號
建議改以輔助表列出該廠牌型號的機台明細做對照,設計可自動擴充的新公式,
以免機台增減還需修改現有這方式的A,B欄公式

[attach]36696[/attach]
作者: cowww    時間: 2023-7-10 16:40

回復 38# Andy2483

非常感謝Andy2483大大的解惑

這個方法好
雖然增加機台的可能性很低
但是比起超長的公式,機台明細對照表卻是比較方便且比較易懂




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)