返回列表 上一主題 發帖

[發問] Excel抓取多筆資料

本帖最後由 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))

這是初學者才會犯的錯,後學沒有做到觀前顧後
有逐列不同值比較時一定要考慮到最後有效列沒有與下一列作比較
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

本帖最後由 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陣列的方法
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 25# 准提部林


    謝謝前輩提攜
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 22# qaqa3296


    qaqa3296前輩的範例裡有很詳細的心得註解,勤學的程度不輸Andy,邀請前輩研究27樓範例情境,與 cowww前輩研討解決方案
後學有點事要忙
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

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

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


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

執行結果:





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
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

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

回復 35# cowww


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

用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 【時日莫空過】一個人在世間做了多少事,就等於壽命有多長。因此必須與時間競爭,切莫使時日空過。
返回列表 上一主題