返回列表 上一主題 發帖

請問規則02F - 04F 如果在Data Base 篩選在這個範圍内的相關資料

回復  198188


    以下方案是練習以  Data Base.xlsx 利用輔助欄直接篩選的方案,請前輩參考

1.選取 ...
Andy2483 發表於 2025-10-14 13:53



   可否説明一下輔助欄的操作原理和規則

TOP

回復 21# 198188


WO No表選取 02F-04F後,按鈕執行:


Layout Dwg表會得到符合樓層且符合批次的篩選:


Frame per Dwg表會得到符合條件且數量>0的篩選:


Part List表會得到符合條件且數量>0的篩選:
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復  198188


WO No表選取 02F-04F後,按鈕執行:


Layout Dwg表會得到符合樓層且符合批次的篩選:
...
Andy2483 發表於 2025-10-15 14:30


我在 "WO NO", "LAYOUT DWG", FRAME PER DWG" , "PART LIST"  �堶悼[入 “WO-NO"  及執行鍵,運作後,出現 Error

TOP

回復 23# 198188


    請加入以下紅字行代碼

If .AutoFilter Is Nothing Then
         .[A1].Resize(, C).AutoFilter
         With ActiveWindow
            .FreezePanes = False
            .ScrollRow = 1: .ScrollColumn = 1: .SplitRow = 1
            .FreezePanes = True
         End With
         Else
         .[A1].AutoFilter: .[A1].Resize(, C).AutoFilter
         If .FilterMode = True Then .ShowAllData
         ActiveWindow.ScrollRow = 1: ActiveWindow.ScrollColumn = 1
      End If
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復  198188


    請加入以下紅字行代碼

If .AutoFilter Is Nothing Then
         .[A1].Resize ...
Andy2483 發表於 2025-10-15 15:21



   可以了,感謝前輩指點。

TOP

回復  198188


    請加入以下紅字行代碼

If .AutoFilter Is Nothing Then
         .[A1].Resize ...
Andy2483 發表於 2025-10-15 15:21


前輩可否幫我看看這個。

相關規則在 “講解 Rule”一頁詳細講解。

result.rar (303.51 KB)

TOP

前輩可否幫我看看這個。

相關規則在 “講解 Rule”一頁詳細講解。
198188 發表於 2025-10-20 17:47



  用這個模板,Rule 一頁,我將規則按列模式排列,方便程式設計。

result.rar (301.3 KB)

TOP

回復 27# 198188


    以下方案請試試看

Option Explicit
Sub TEST()
Dim Arr, Brr, Crr(1 To 10000, 1 To 18), A, V, Z, Q, S, i&, j%, R&, C%, y%, K, X%, T$, T1$, T2$, T3$, T4$, Rk$, W, L
Application.ScreenUpdating = False
Set Z = CreateObject("Scripting.Dictionary")
Brr = Range([Rule!X1], [Rule!E65536].End(3)(1, -3))
For i = 2 To 6
   Z(Brr(i, 3) & "|") = Brr(i, 1)
Next
For i = 2 To UBound(Brr)
   For j = 7 To 24
      If Brr(i, j) = "" Then
         If j = 8 Then
            Z("/" & Brr(i, 5) & "/") = Brr(i, 7)
         End If
         Exit For
      End If
      Z("/" & Brr(i, j) & "/") = Brr(i, 5)
      Z("/" & Brr(i, j) & "//") = Brr(i, 6)
   Next
Next
Brr = Sheets("講解 Rule").UsedRange
For i = 1 To UBound(Brr)
   If Brr(i, 1) Like "規則#*字頭是* 一列的*備注 是*複製*" Then
      S = InStr(Brr(i, 1), "字頭是") + 3
      T = Replace(Trim(Mid(Brr(i, 1), S, InStr(Brr(i, 1), " 一列的") - S)), "Hareware", "Hardware")
      Rk = Trim(Mid(Brr(i, 1), InStr(Brr(i, 1), "備注 是") + 5, 1))
      S = InStr(Brr(i, 1), "複製 ") + 4
      S = Trim(Mid(Brr(i, 1), S, InStr(Brr(i, 1), " 表格") - 1 - S))
      Z(T & "\" & Rk) = S
      Z(S & "/UR") = Sheets(S).[A65536].End(3)(2).Row
      Z(S & "/UC") = Sheets(S).Cells(Z(S & "/UR") - 1, 256).End(xlToLeft).Column
   End If
   If Brr(i, 1) Like "規則#*字頭是 以上藍色字母*組裝圖的出貨情況 是*複製*" Then
      Rk = Trim(Mid(Brr(i, 1), InStr(Brr(i, 1), "情況 是") + 5, 1))
      S = InStr(Brr(i, 1), "複製 ") + 4
      S = Trim(Mid(Brr(i, 1), S, InStr(Brr(i, 1), " 表格") - 1 - S))
      For y = 1 To 100
         If Brr(i - y, 2) = "" Then Exit For Else T = Brr(i - y, 2)
         Z(Z("/" & T & "/") & "\" & Rk) = S
         Z(S & "/UR") = Sheets(S).[A65536].End(3)(2).Row
         Z(S & "/UC") = Sheets(S).Cells(Z(S & "/UR") - 1, 256).End(xlToLeft).Column
      Next
   End If
Next
Arr = Sheets("Material").UsedRange
For i = 2 To UBound(Arr)
   Z(Arr(i, 3) & "/m") = i
Next
Brr = Range(Sheets("Part List").[M1], Sheets("Part List").[A65536].End(3))
For i = 2 To UBound(Brr)
   T = Z("/" & Left(Brr(i, 1), 2) & "/")
   T4 = Z("/" & Left(Brr(i, 1), 2) & "//")
   Rk = Brr(i, 7)
   T2 = Z(T & "\" & Rk)
   T3 = T & "-" & Z(Rk & "|")
   If Len(T3) > 31 Then '工作表名>31字(改以中文表示)
      T3 = T4 & "-" & Z(Rk & "|")
   End If
   Z("|" & T3) = T2
   A = Z("/" & T3)
   R = Z("r/" & T3)
   If Not IsArray(A) Then
      A = Crr
   End If
   If T2 = "Bom" Then
      R = R + 1
      A(R, 1) = R
      A(R, 2) = Brr(i, 1)
      A(R, 3) = Brr(i, 12)
      If A(R, 3) <> "" Then
         A(R, 4) = Arr(Z(A(R, 3) & "/m"), 5)
         A(R, 5) = Arr(Z(A(R, 3) & "/m"), 6)
         A(R, 6) = Arr(Z(A(R, 3) & "/m"), 7)
         A(R, 8) = Arr(Z(A(R, 3) & "/m"), 11)
         A(R, 9) = Arr(Z(A(R, 3) & "/m"), 10)
         A(R, 13) = Arr(Z(A(R, 3) & "/m"), 8)
      End If
      A(R, 7) = Brr(i, 4) & " x " & Brr(i, 5)
      A(R, 10) = Brr(i, 3)
      A(R, 18) = Brr(i, 7)
      GoTo i01
   End If
   If T2 = "Gasket" Then
      R = R + 1
      A(R, 1) = R
      A(R, 2) = Brr(i, 1)
      A(R, 9) = Brr(i, 3)
      A(R, 6) = Brr(i, 5)
      A(R, 7) = Brr(i, 6)
      A(R, 11) = Brr(i, 7)
      A(R, 3) = Brr(i, 12)
      If A(R, 3) <> "" Then
         A(R, 4) = Arr(Z(A(R, 3) & "/m"), 5)
         A(R, 5) = Arr(Z(A(R, 3) & "/m"), 6)
         A(R, 8) = Arr(Z(A(R, 3) & "/m"), 8)
      End If
      GoTo i01
   End If
   If T2 = "Structural" Then
      R = R + 1
      A(R, 1) = R
      A(R, 2) = Brr(i, 1)
      A(R, 3) = Brr(i, 2)
      A(R, 5) = Brr(i, 3)
      L = Split(Brr(i, 2) & "mm", "mm")(0)
      W = Split(Brr(i, 2) & "mm", "mm")(1)
      L = Val(StrReverse(Mid(Val(StrReverse(L & 1)), 2)))
      W = Val(StrReverse(Mid(Val(StrReverse(W & 1)), 2)))
      A(R, 6) = L * W
      A(R, 8) = A(R, 5) * A(R, 6) / 1000
      A(R, 7) = Application.RoundUp(A(R, 5) * A(R, 6) / 1000, 0)
      GoTo i01
   End If
   If T2 = "DN Material" Then '
      R = R + 1
      A(R, 1) = R
      A(R, 2) = Brr(i, 1)
      A(R, 3) = Brr(i, 12)
      A(R, 4) = Brr(i, 5)
      A(R, 7) = Brr(i, 3)
      If A(R, 3) <> "" Then
         A(R, 5) = Arr(Z(A(R, 3) & "/m"), 11)
         A(R, 6) = Arr(Z(A(R, 3) & "/m"), 8)
         A(R, 6) = A(R, 5) * A(R, 7)
      End If
      A(R, 9) = Brr(i, 7)
      GoTo i01
   End If
   If T2 = "Fabrication Extrusion" Then
      R = R + 1
      A(R, 1) = R
      A(R, 2) = Brr(i, 1)
      A(R, 3) = Brr(i, 11)
      A(R, 4) = Brr(i, 10)
      A(R, 5) = Brr(i, 4)
      A(R, 6) = Brr(i, 3)
      A(R, 7) = Brr(i, 1)
      If A(R, 7) Like "*-*-*" Then
         Q = Split(A(R, 7), "-")
         A(R, 7) = Q(0) & "-" & Q(1)
      End If
      A(R, 8) = Brr(i, 7)
   End If
i01: Z("/" & T3) = A
   Z("r/" & T3) = R
Next
Brr = Range(Sheets("Frame per Dwg").[M1], Sheets("Frame per Dwg").[A65536].End(3))
For i = 2 To UBound(Brr)
   T = Z("/" & Left(Brr(i, 2), 2) & "/")
   T4 = Z("/" & T & "/")
   Rk = Brr(i, 6)
   T2 = Z(T & "\" & Rk)
   T3 = T4 & "-" & Z(Rk & "|")
   Z("|" & T3) = T2
   A = Z("/" & T3)
   R = Z("r/" & T3)
   If Not IsArray(A) Then
      A = Crr
   End If
   If T2 = "Finish" Then
      R = R + 1
      A(R, 1) = R
      A(R, 2) = Brr(i, 2)
      A(R, 3) = Brr(i, 3)
      A(R, 4) = Brr(i, 4)
      A(R, 5) = Brr(i, 5)
      A(R, 7) = Brr(i, 6)
   End If
   Z("/" & T3) = A
   Z("r/" & T3) = R
Next
Workbooks.Add
Q = ActiveWorkbook.Name
For Each K In Z.Keys
   If IsArray(Z(K)) And Z("r" & K) > 0 Then
      T = Mid(K, 2)
      ThisWorkbook.Sheets(Z("|" & T)).Copy Before:=Workbooks(Q).Sheets(1)
      ActiveSheet.Name = T
      With Cells(Z(Z("|" & T) & "/UR"), 1).Resize(Z("r" & K), Z(Z("|" & T) & "/UC"))
         .Value = Z(K)
         .Borders.LineStyle = xlContinuous
      End With
   End If
Next
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

本帖最後由 198188 於 2025-10-22 16:27 編輯
回復  198188


    以下方案請試試看

Option Explicit
Sub TEST()
Dim Arr, Brr, Crr(1 To 10000 ...
Andy2483 發表於 2025-10-22 14:19


因爲程式中有中文,無法運行,我更新了一下規則,規則用列表模式顯示,用 “ Symbol" 來識別 備注符號,用 "Code" 來識別頭兩個字頭。這樣即使將來要增加或減少 符號及編號都不影響程式。

1)        根據Rule的規則, 當 “Part List” 欄G ”備注” 的符號及欄A 的字頭跟 “Rule” 的Symbol 欄 & Code 欄相同,根據 Rule欄A 的Form名稱複雜一個新模板,命名為 欄I的English Product + Symbol 的對應名稱並去除 “-“ 和後面的中文字
舉例
Part List �堶惇O “F0” 字頭 & “Y” 備注, 複製Bom 模板,命名 “Screw-Deliver to Site”
Part List �堶惇O “IG” 字頭 & “-” 備注, 複製Gasket 模板,命名 “Gasket-Deliver to Factory”
Part List �堶惇O “E1” 字頭 & “Y” 備注, 複製DN Material 模板,命名 “Extrusion-Delivery Notes For Material Parts”

2)        根據Rule的規則, 當 “Frame per Dwg” 欄F ”備注” 的符號及欄B的字頭跟 “Rule” 的Symbol 欄 & Code 欄相同,根據 Rule欄A 的Form名稱複雜一個新模板,命名為 欄I的English Product + Symbol 的對應名稱並去除 “-“ 和後面的中文字
舉例
Frame per Dwg �堶惇O “DF” 字頭 & “T” 備注, 複製Finish 模板,命名 “Door Frame- Finish Part Order On-Hold”
Frame per Dwg �堶惇O “WS” 字頭 & “T” 備注, 複製Finish 模板,命名 “Window Sash - Finish Part Order On-Hold”
Frame per Dwg �堶惇O “DF” 字頭 & “W” 備注, 複製Finish 模板,命名 “Door Frame - Finish Part Order”

Bom模板 填寫規則
Range (“A4”) = 欄G 的英文名稱 + 備注相關的B 列名稱 (舉例 讀取Screw 的資料,備注是Y, 顯示 “ Screw – 螺絲”; 讀取Panel 的資料,備注是 - ,顯示 ”Panel – 鈑金”)
Range (“A5”) = 欄 H 的中文名稱 + 備注相關的B 列名稱 (舉例 讀取Screw 的資料,備注是Y, 顯示 “Deliver to Site -工地用”; 讀取Panel 的資料,備注是 - ,顯示 ”Deliver to Factory - 廠房用”)
尺寸 = Part List 欄 L 長度 "x" 欄 M 寬度 (舉例 2211.1 x 717.9)
數量 = Part List 欄  C 數量
備註 =  Part List 欄  G 備註量
供應商編號 = Material 欄 C 供應商編號
英文描述 = Material 欄 E 英文描述(對客戶)
中文描述 = Material 欄 F 中文描述(對供應商)
材質, 標準及等級 = Material 欄 G 材質
單重 = Material 欄 K 單重
顔色/表面處理 = Material 欄 J 顔色/表面處理
單位 = Material 欄 H 英文單位

Gasket模板 填寫規則
Range (“D6”) = 欄G 的英文名稱 + 備注相關的B 列名稱 (舉例 讀取Screw 的資料,備注是Y, 顯示 “ Screw – 螺絲”; 讀取Panel 的資料,備注是 - ,顯示 ”Panel – 鈑金”)
Range (“D7”) = 欄 H 的中文名稱 + 備注相關的B 列名稱 (舉例 讀取Screw 的資料,備注是Y, 顯示 “Deliver to Site -工地用”; 讀取Panel 的資料,備注是 - ,顯示 ”Deliver to Factory - 廠房用”)
序號= 1,2,3順序
編號 = Part List 欄 A 加工件編號
總數量 = Part List 欄  C 數量
寬度 = Part List 欄 E 寬度
高度 = Part List 欄 F 高度
備註 =  Part List 欄  G 備註量
供應商編碼 = Material 欄 C 供應商模號
英文描述 = Material 欄 E 英文描述(對客戶)
中文描述 = Material 欄 F 中文描述(對供應商)
單位 = Material 欄 H 英文單位

Structural 模板 填寫規則
Range (“C3”) = 欄G 的英文名稱 + 備注相關的B 列名稱 (舉例 讀取Screw 的資料,備注是Y, 顯示 “ Screw – 螺絲”; 讀取Panel 的資料,備注是 - ,顯示 ”Panel – 鈑金”)
Range (“C4”) = 欄 H 的中文名稱 + 備注相關的B 列名稱 (舉例 讀取Screw 的資料,備注是Y, 顯示 “Deliver to Site -工地用”; 讀取Panel 的資料,備注是 - ,顯示 ”Deliver to Factory - 廠房用”)
序號= 1,2,3順序
編號 = Part List 欄 A 加工件編號
材料描述 =  Part List 欄 B 描述
總長度 = Part List 欄 C 數量
截面積 = Part List 欄 B 描述的長度相乘 舉例 描述是"19.8mmx8mm DC983 STRUCTURAL SILICONE-BLACK"  截面積計算為 19.8*8=158.4
總容量 = 欄E 總長度 * 欄F 截面積 / 1000 (小數點進1, 舉例 12.1 =13;14.3 = 15; 0.8 = 1)

DN Material 模板 填寫規則
Range (“A3”) = 欄G 的英文名稱 + 備注相關的B 列名稱 (舉例 讀取Screw 的資料,備注是Y, 顯示 “ Screw – 螺絲”; 讀取Panel 的資料,備注是 - ,顯示 ”Panel – 鈑金”)
Range (“A4”) = 欄 H 的中文名稱 + 備注相關的B 列名稱 (舉例 讀取Screw 的資料,備注是Y, 顯示 “Deliver to Site -工地用”; 讀取Panel 的資料,備注是 - ,顯示 ”Deliver to Factory - 廠房用”)
序號= 1,2,3順序
編碼 = Part List 欄 A 加工件編號
供應商編號 = Part List 欄 K 供應商編號
寬度 = Part List 欄 E 寬度
總數量 = Part List 欄  C 數量
單重 = 用供應商編號讀取 Material 欄 K 單重
單位 = 用供應商編號讀取 Material 欄 H 英文單位
總重量 = 欄 E 單重 * 欄G 總數量
備註 =  Part List 欄  G 備註量

Fabrication Extrusion模板 填寫規則
Range (“A3”) = 欄G 的英文名稱 + 備注相關的B 列名稱 (舉例 讀取Screw 的資料,備注是Y, 顯示 “ Screw – 螺絲”; 讀取Panel 的資料,備注是 - ,顯示 ”Panel – 鈑金”)
Range (“A4”) = 欄 H 的中文名稱 + 備注相關的B 列名稱 (舉例 讀取Screw 的資料,備注是Y, 顯示 “Deliver to Site -工地用”; 讀取Panel 的資料,備注是 - ,顯示 ”Deliver to Factory - 廠房用”)
序號= 1,2,3順序
加工件編號 = Part List 欄 A 加工件編號
模號 = Part List 欄 K 供應商編號
成色編號  = Part List 欄 J 成色編號
長度 =  Part List 欄 D 長度
總數量 = Part List 欄  C 數量
參考圖號 = Part List 欄 A 加工件編號 去除第二個 “-” 後面的字(如有)
舉例 加工件編號 E1106-600 參考圖號 E1106-600; 加工件編號 E1106-600-01 參考圖號 E1106-600; 加工件編號 E1106-600-11 參考圖號 E1106-600
備註 =  Part List 欄  G 備註量

Finish 模板 填寫規則
Range (“A3”) = 欄G 的英文名稱 + 備注相關的B 列名稱 (舉例 讀取Screw 的資料,備注是Y, 顯示 “ Screw – 螺絲”; 讀取Panel 的資料,備注是 - ,顯示 ”Panel – 鈑金”)
Range (“A4”) = 欄 H 的中文名稱 + 備注相關的B 列名稱 (舉例 讀取Screw 的資料,備注是Y, 顯示 “Deliver to Site -工地用”; 讀取Panel 的資料,備注是 - ,顯示 ”Deliver to Factory - 廠房用”)
序號= 1,2,3順序
單元件編號 = Frame per Dwg 欄 B 組裝圖編號 (相應頭兩個字母)
寬度 = Frame per Dwg 欄 C 組裝圖寬度
高度 = Frame per Dwg 欄 D 組裝圖高度
總數量 = Frame per Dwg 欄 E 組裝圖在分佈圖上的數量
備註 = Frame per Dwg 欄 F 組裝圖的出貨情況

result.rar (293.53 KB)

規則.rar (17.6 KB)

TOP

因爲程式中有中文,無法運行,我更新了一下規則,規則用列表模式顯示,用 “ Symbol" 來識別 備注 ...
198188 發表於 2025-10-22 16:25


另外制表完成後,可否將生成的制表,打印 PDF save 在該 Excel 的位置?

TOP

        靜思自在 : 【蒙蔽的自由】人常在什麼都可以自由自在的時候,卻被這種隨心所欲的自由蒙蔽,虛擲時光而毫無覺知。
返回列表 上一主題