返回列表 上一主題 發帖

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

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

[attach]38095[/attach][attach]38096[/attach][attach]38097[/attach]

請問如果規則是02F - 04F 或者多個樓層,如果在Data Base 篩選在這個範圍内的相關資料。
如圖一,圖二,圖三
附上Excel Data Base & 想要的結果及規則。

Desktop.rar (146.89 KB)

TOP

B2=VLOOKUP($A2,'[Data Base.xlsx]WO No'!$A:$K,COLUMN(B1),)
google"EXCEL迷"  blog  或google網址:https://hcm19522.blogspot.com/

TOP

本帖最後由 198188 於 2025-10-6 11:38 編輯

B2=VLOOKUP($A2,'[Data Base.xlsx]WO No'!$AK,COLUMN(B1),)
hcm19522 發表於 2025-10-6 11:19


這個并非我的問題要求。
我意思是說,
我輸入02F-04F (圖1)
就會自動抽取 Layout Dwg 表�媊� B 樓層屬於這個 02F - 04F 範圍内的資料出來 (圖3)

我輸入03F-08F(圖1)
就會自動抽取 Layout Dwg 表�媊� B 樓層屬於這個 03F - 08F 範圍内的資料出來(圖3)

TOP

本帖最後由 198188 於 2025-10-8 09:16 編輯
  1. Sub Copy_Layout_To_Data() 'ok!
  2.         Dim h, i, j As Integer
  3.         Dim myString, myString1 As String
  4.         Dim charToFind, charToFind1, charToFind2 As String
  5.         Dim position, position1, position2, position3 As Long
  6.         Dim stringLength, stringLength1 As Long
  7.         j = 2
  8.         
  9.         h = Worksheets("Layout Dwg").Cells(Rows.Count, 1).End(3).Row
  10.         h = h + 1
  11.         
  12.         myString = Sheets("Data").Range("C2")
  13.         stringLength = Len(myString)
  14.         charToFind = "-" ' Searching for lowercase '-' in "World"
  15.         position = InStr(1, myString, charToFind, vbTextCompare)

  16.         If position > 0 Then
  17.         
  18.         a = Mid(myString, 1, position - 2)
  19.         b = Mid(myString, position + 1, stringLength - position - 1)
  20.         
  21.         For i = 2 To h
  22.         Sheets("Layout Dwg").Select
  23.         myString1 = Range("B" & i)
  24.         charToFind2 = "F" ' Searching for lowercase 'F' in "World"
  25.         position2 = InStr(1, myString1, charToFind2, vbTextCompare)
  26.         
  27.         If position2 > 0 Then
  28.         c = Mid(myString1, 1, position2 - 1)
  29.         If c = a Then
  30.         Sheets("Layout Dwg").Select
  31.         Range("A" & i & ":C" & i).Select
  32.         Selection.Copy
  33.         Sheets("Data").Select
  34.         Range("M" & j).Select
  35.         ActiveSheet.Paste
  36.         j = j + 1
  37.         Else
  38.         If c > a And c <= b Then
  39.         Sheets("Layout Dwg").Select
  40.         Range("A" & i & ":C" & i).Select
  41.         Selection.Copy
  42.         Sheets("Data").Select
  43.         Range("M" & j).Select
  44.         ActiveSheet.Paste
  45.         j = j + 1
  46.         End If
  47.         End If
  48.         End If
  49.         Next i
  50.         
  51.         Else
  52.         charToFind1 = "&" ' Searching for lowercase '&' in "World"
  53.         position1 = InStr(1, myString, charToFind1, vbTextCompare)
  54.         If position1 > 0 Then
  55.         Z = Mid(myString, 1, position1 - 1)
  56.         y = Mid(myString, position1 + 1, stringLength - position1)
  57.         
  58.         For i = 2 To h
  59.         
  60.         Sheets("Layout Dwg").Select
  61.         c = Range("B" & i)
  62.         If c = Z Or c = y Then
  63.         Sheets("Layout Dwg").Select
  64.         Range("A" & i & ":C" & i).Select
  65.         Selection.Copy
  66.         Sheets("Data").Select
  67.         Range("M" & j).Select
  68.         ActiveSheet.Paste
  69.         j = j + 1
  70.         End If
  71.         
  72.         Next i
  73.         
  74.         Else
  75.         W = myString
  76.         For i = 2 To h
  77.         
  78.         Sheets("Layout Dwg").Select
  79.         c = Range("B" & i)
  80.         If c = W Then
  81.         Sheets("Layout Dwg").Select
  82.         Range("A" & i & ":C" & i).Select
  83.         Selection.Copy
  84.         Sheets("Data").Select
  85.         Range("M" & j).Select
  86.         ActiveSheet.Paste
  87.         j = j + 1
  88.         End If
  89.         Next i
  90.         
  91.         End If
  92.         End If
  93.     End Sub
複製代碼
這個并非我的問題要求。
我意思是說,
我輸入02F-04F (圖1)
就會自動抽取 Layout Dwg 表�媊� B 樓層 ...
198188 發表於 2025-10-6 11:36

嘗試用這個方式可以區別,但是運行速度太慢,請教各大大有沒有改進空間?

Data Base.rar (162.25 KB)

TOP

本帖最後由 Andy2483 於 2025-10-8 15:28 編輯

回復 2# 198188


    謝謝前輩發表此主題與範例
後學藉此帖練習陣列與字典,學習方案如下,請前輩參考

Option Explicit
Sub TEST()
Dim Brr, Z, Q, i&, j%, N&, T$, T1$, MyPath$, xFile$, xBook As Workbook, MyBook As Workbook, Re
Set Z = CreateObject("Scripting.Dictionary")
Set MyBook = ThisWorkbook
MyPath = MyBook.Path & "\"
xFile = "Data Base.xlsx"
On Error Resume Next
Set xBook = Workbooks(xFile)
If xBook Is Nothing Then
   Set xBook = Workbooks.Open(MyPath & xFile, , True, , "")
   Re = True
   MyBook.Activate
End If
On Error GoTo 0
T = Sheets("Read").[A2] & "|" & Sheets("Read").[C2]
T1 = Sheets("Read").[B2]
With xBook.Sheets("WO No")
   For i = 2 To .[A65536].End(3).Row
      If .Cells(i, "B") & "|" & .Cells(i, "D") = T Then
         .Rows(i).Copy Sheets("WO No").Rows(2)
         Sheets("Read").[A2].Resize(, 3).Copy Sheets("WO No").[B2]
         GoTo 11
      End If
   Next
   MsgBox "Nothing": Exit Sub
End With
11
If T1 Like "##F-*##F" Then
   For i = Val(T1) To Val(StrReverse(Mid(StrReverse(T1), 2, 2)))
      Z(Format(i, "00F")) = ""
   Next
   Else
   Q = Split(T1 & "&" & T1, "&")
   For i = 0 To UBound(Q)
      Z(Q(i)) = 0
   Next
End If
Brr = xBook.Sheets("Layout Dwg").[A1].CurrentRegion
For i = 2 To UBound(Brr)
   If Z.Exists(Brr(i, 2)) Then
      Z(Brr(i, 1)) = Z(Brr(i, 1)) + Val(Brr(i, 3))
      N = N + 1
      For j = 1 To 3: Brr(N, j) = Brr(i, j): Next
   End If
Next
If N > 0 Then Sheets("Layout Dwg").[K2].Resize(N, 3) = Brr: N = 0 Else MsgBox "Nothing2": GoTo 12
Brr = xBook.Sheets("Frame per Dwg").[A1].CurrentRegion
For i = 2 To UBound(Brr)
   If Z(Brr(i, 1)) > 0 Then
      N = N + 1
      For j = 1 To 6: Brr(N, j) = Brr(i, j): Next
      Brr(N, 5) = Brr(N, 5) * Z(Brr(i, 1))
   End If
Next
If N > 0 Then Sheets("Frame per Dwg").[N2].Resize(N, 6) = Brr: N = 0
Brr = xBook.Sheets("Part List").[A1].CurrentRegion
For i = 2 To UBound(Brr)
   If Z(Brr(i, 7)) > 0 Then
      N = N + 1
      For j = 1 To 13: Brr(N, j) = Brr(i, j): Next
      Brr(N, 3) = Brr(N, 3) * Z(Brr(i, 7))
   End If
Next
If N > 0 Then Sheets("Part List").[U2].Resize(N, 13) = Brr
12: If Re = True Then xBook.Close 0
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

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


    謝謝前輩發表此主題與範例
後學藉此帖練習陣列與字典,學習方案如下,請前輩參考

...
Andy2483 發表於 2025-10-8 14:54


感謝前輩指點

TOP

回復  198188


    謝謝前輩發表此主題與範例
後學藉此帖練習陣列與字典,學習方案如下,請前輩參考

...
Andy2483 發表於 2025-10-8 14:54




前輩你好,檢視後,發現有兩點漏了提出,
Layout Dwg  需要加一個篩選條件 “批次”

Part List 需要增加一個資料: 篩選條件是,WO-No 欄F - 欄K 的各樣數據字母,舉例 WO-J057-022 �堶惘� "WS" 根據 Frame Per Dwg �堶悸熔楖佴牉鳩t有“WS”,在Part List 對應組裝號/加工件號 篩選出來 (只顯示各樣數據有的相關字母)數量也是兩個表的總數相乘 (如圖及附件)

WO-J057-022.rar (170.02 KB)

Data Base.rar (151.58 KB)

TOP

前輩你好,檢視後,發現有兩點漏了提出,
Layout Dwg  需要加一個篩選條件 “批次”

Part List ...
198188 發表於 2025-10-9 17:30


Layout Dwg 批次問題已經解決。

Part List 補充方面 還沒解決
Frame per Dwg 表内欄B "組裝圖號" 含有 WO No �堶悸� "各樣數據" 欄F - 欄K 的英文字母,讀取 在Part List 欄G "對應組裝號/加工件號" 相同的"組裝圖號",及數量相乘。
  1. For i = 2 To UBound(Brr)
  2.    If Z.Exists(Brr(i, 2)) Then
  3.    If Brr(i, 4) = Sheets("Read").[A2] Then
  4.       Z(Brr(i, 1)) = Z(Brr(i, 1)) + Val(Brr(i, 3))
  5.       N = N + 1
  6.       For j = 1 To 4: Brr(N, j) = Brr(i, j): Next
  7.    End If
  8.    End If
  9. Next
  10. If N > 0 Then Sheets("Layout Dwg").[A2].Resize(N, 4) = Brr: N = 0 Else MsgBox "Nothing under the floor": GoTo 12
複製代碼

TOP

  1. Set Z = CreateObject("Scripting.Dictionary")

  2. xFile = "Data Base.xlsx"

  3. Set xBook = Workbooks(xFile)



  4. a = Sheets("WO No").Range("F2")
  5. b = Sheets("WO No").Range("G2")
  6. c = Sheets("WO No").Range("H2")
  7. d = Sheets("WO No").Range("I2")
  8. e = Sheets("WO No").Range("J2")
  9. f = Sheets("WO No").Range("K2")


  10. G = Sheets("Part List").Range("A1").CurrentRegion.Rows.Count + 1

  11. Brr = Sheets("Frame per Dwg").[A1].CurrentRegion
  12.   For i = 2 To UBound(Brr)
  13.   If Mid(Brr(i, 2), 1, 2) = a Or Mid(Brr(i, 2), 1, 2) = b Or Mid(Brr(i, 2), 1, 2) = c Or Mid(Brr(i, 2), 1, 2) = d Or Mid(Brr(i, 2), 1, 2) = e Or Mid(Brr(i, 2), 1, 2) = f Then
  14.    Z(Brr(i, 2)) = Z(Brr(i, 2))
  15.       N = N + 1
  16.       For j = 1 To 6: Brr(N, j) = Brr(i, j): Next
  17.    End If

  18. Next

  19. N = 1
  20. Arr = xBook.Sheets("Part List").[A1].CurrentRegion
  21. For i = 2 To UBound(Arr)
  22.    If Z.Exists(Arr(i, 7)) Then
  23.       N = N + 1
  24.       For j = 1 To 13
  25.       Arr(N, j) = Arr(i, j)
  26.       Next j
  27.       Arr(N, 5) = Arr(N, 5) * Z(Arr(i, 7))
  28.    End If
  29. Next
  30. If N > 0 Then Sheets("Part List").Range("A" & G).Resize(N, 13) = Arr
複製代碼
Layout Dwg 批次問題已經解決。

Part List 補充方面 還沒解決
Frame per Dwg 表内欄B "組裝圖 ...
198188 發表於 2025-10-10 12:12


Part List 補充方面也解決,但是無法套入相同模組,需要獨立開一個模組。還有複製時,總是會複雜第一欄的名目。

TOP

        靜思自在 : 能付出愛心就是福,能消除煩惱就是慧。
返回列表 上一主題