回復 1#cclo0728
請測試看看,謝謝
Sub test()
Dim Arr, T, R&
With Sheets("資料輸入")
R = .[b65536].End(3).Row
If R < 5 Then Exit Sub
Arr = .Range("b5:g" & R)
T = .[F2]
End With
With Sheets("出貨資料")
R = .[b65536].End(3).Row + 1
.Range("b" & R).Resize(UBound(Arr), 6) = Arr
.Range("a" & R & ":a" & R + UBound(Arr) - 1) = T
End With
End Sub作者: cclo0728 時間: 2022-10-6 16:36
回復 2#samwang
Sub test()
Dim Arr, T, R&
With Sheets("資料輸入")
R = .[b65536].End(3).Row
If R < 5 Then Exit Sub <------這行的意思是?
Arr = .Range("b5:g" & R)
T = .[F2]
End With
With Sheets("出貨資料")
R = .[b65536].End(3).Row + 1
.Range("b" & R).Resize(UBound(Arr), 6) = Arr<------這行的意思是?
.Range("a" & R & ":a" & R + UBound(Arr) - 1) = T<------這行的意思是?
End With
End Sub
請測試看看,謝謝
Sub test()
Dim Arr, T, T2, R&
With Sheets("資料輸入")
R = .[b65536].End(3).Row
If R < 5 Then Exit Sub
Arr = .Range("b5:g" & R)
T = .[A2]: T2 = .[B2]
End With
With Sheets("出貨資料")
R = .[C65536].End(3).Row + 1
.Range("C" & R).Resize(UBound(Arr), 6) = Arr
.Range("a" & R & ":a" & R + UBound(Arr) - 1) = T
.Range("b" & R & ":b" & R + UBound(Arr) - 1) = T2
End With
End Sub作者: cclo0728 時間: 2022-10-7 09:48
Sheets("出貨資料").Activate
End Sub
Sub 檢查出貨資料_序號重複()
Dim xA, xB, BFind As Range
'↑宣告變數
Set xA = [資料輸入!B2]
'↑令xA是 "資料輸入" 工作表 [B2]
Set xB = [出貨資料!B:B]
'↑令xB是 "出貨資料" 工作表 B欄
Set BFind = xB.Find(xA, LookAt:=xlWhole)
'↑尋找 出貨資料!B:B 內容全相同儲存格
'↑(xA, LookAt:=xlPart) 是部分相同儲存格
If Not BFind Is Nothing Then
'↑如果有找到
MsgBox "出貨資料已經有: " & xA & " 序號!"
Sheets("出貨資料").Activate
'↑畫面跳到 "出貨資料" 表
BFind.Activate
'↑選取找到的那個儲存格
ERR = 1
'↑是一個跨程式的變數,如果找到 令ERR = 1
End If
End Sub作者: Andy2483 時間: 2022-10-14 08:00
主要程式碼變更如下:
Option Explicit
Public Dats As Date, Datn As Date, AC_WO_NA
'↑設為全域變數!給各運用此副程式的主程式運用
Sub 長序號轉_日期_短序號()
Dim Arr, i&, xB, N&, D1 As Date, TTT
'↑宣告變數:D1 是日期,N是數字
Set xB = Sheets("出貨資料")
'↑令xB是 "出貨資料" 工作表
Dats = 0
'↑起始日歸零
Datn = 0
'↑結束日歸零
If IsDate(xB.[I1]) Then
'↑如果 出貨資料表的[I1]是日期
Dats = xB.[I1]
'↑起始日就裝入這日期
End If
If IsDate(xB.[J1]) Then
'↑如果 出貨資料表的[J1]是日期
Datn = xB.[J1]
'↑結束日就裝入這日期
End If
Arr = xB.Range(xB.[J1], Cells(xB.UsedRange.EntireRow.Count, 1))
'↑令Arr是"出貨資料" 工作表 A:G欄之間有使用列的區域儲存格值
For i = 2 To UBound(Arr)
'↑設迴圈拆解B欄的長序號
D1 = "20" & Mid(Arr(i, 2), 1, 2) & "/" & Mid(Arr(i, 2), 3, 2) & "/" & Mid(Arr(i, 2), 5, 2)
'↑ "20",加長序號第1個字開始取兩字元="22"
',再加長序號第3個字開始取兩字元="10"
',再加長序號第5個字開始取兩字元="08"
'D1="2022/10/08"字串轉化為日期,因D1宣告為日期
Arr(i, 9) = D1
'↑把D1日期放入Arr的第9欄位置
N = Right(Arr(i, 2), 3)
'↑令N是常序號的右邊3個字元字串轉數字,因N宣告為數字
Arr(i, 10) = N
'↑把N數字放入Arr的第10欄位置
Next
Workbooks.Add
'↑開一個新的檔案
AC_WO_NA = ActiveWorkbook.Name
Sheets(1).Name = "出貨資料"
[A1].Resize(UBound(Arr), 10) = Arr
'↑把Arr陣列的資料從[A1]開始倒入新工作表的存格
If Datn = 0 Then
'↑如果結束日是歸零狀態?
Datn = CDate(WorksheetFunction.Max([I:I]))
'↑條件成立!就抓[I:I]裡的最大日期裝進結束日
End If
If Dats = 0 Then
'↑如果起始日是歸零狀態?
Dats = CDate(WorksheetFunction.Min([I:I]))
'↑條件成立!就抓[I:I]裡的最小日期裝進開始日
End If
[I1] = "出貨日期"
[J1] = "當日序號"
Cells.Columns.AutoFit
'↑自動調整欄寬
Cells.Rows.AutoFit
'↑自動調整列高
[2:2].Select
ActiveWindow.FreezePanes = True
'↑第二列以上儲存格凍結窗格
[A1].Select
[A1].AutoFilter
'↑設定篩選
Cells.Borders.LineStyle = xlContinuous
'↑顯示格線
End Sub
Option Explicit
Sub 客戶出貨金額_統計圖表()
Application.ScreenUpdating = False
'↑執行時螢幕畫面不要跟著變動
Call 長序號轉_日期_短序號
Dim Yrr, i&, xD, Arr, Brr, d, c, R
'↑宣告變數
Set xD = CreateObject("Scripting.Dictionary")
'↑令xD是字典
Set Yrr = [出貨資料!A1].CurrentRegion
'↑令 Yrr是 [A1]相鄰非空格所串連起來的儲存格,擴展到方正區域的最小範圍儲存格
c = [出貨資料!A1].End(xlToRight).Column
'↑令C是此表的欄數
R = [出貨資料!A1].End(xlDown).Row
'↑令R是此表的列數
For i = 2 To R
'↑設迴圈將客戶名利用字典去除重複並累加 G欄的金額
If Yrr(i, 9) < Dats Or Yrr(i, 9) > Datn Then
'↑如果 I欄日期是小於開始日 或 I欄日期是大於結束日?
GoTo 999
'↑條件成立!就跳到 999的位置繼續執行!
End If
If Yrr(i, 1) <> "" Then
d = Yrr(i, 1)
xD(d) = xD(d) + Yrr(i, 7)
End If