標題:
[發問]
請問如何將各筆數量,依日期範圍加總?
[打印本頁]
作者:
gaishutsusuru
時間:
2020-3-24 15:13
標題:
請問如何將各筆數量,依日期範圍加總?
本帖最後由 gaishutsusuru 於 2020-3-24 15:19 編輯
各位大大您好,想請各位協助幫忙以下這個問題:
[attach]31811[/attach]
(圖片中僅是示意部份。完整的資料,請再參考附檔)
原始資料:
(1) A欄:位置。A2~A79:固定不變的。
(2) B欄:種類。B2~B79:資料會變,但與這次詢問問題無關。
(3) C欄:開始日期。
(4) D欄:結束日期。
(5) E~J欄:各尺寸數量。(為了方便,將同一筆資料的數量設為相同。不同筆資料的數量設為1~31。但實際上數量會是完全不同的)
-----
處理後呈現:
(1) N欄:列出日期。以C欄(最早開始日期)為始,至D欄(最晚結束日期)為末。
(2) O欄~T欄:各尺寸數量計算。
* 將所有在日期範圍裡的數量加總,填在對應的日期裡。
* 說明1:
1_1 5E 2020/2/28 2020/3/6 (SS→XXL)的數量是1
1_1 3C 2020/3/6 2020/3/25 (SS→XXL)的數量是2
計算時,「數量:1」只需要計算到2020/3/5;從2020/3/6開始則是計算「數量:2」
也就是說,每筆資料在計算時,不會包含到結束日期。
* 說明2:
2020/2/20的數量:是由「1_3 1A 2020/2/18 2020/2/27」、「2_1 9I 2020/2/20 2020/3/7」、「3_2 6F 2020/2/20 2020/3/3」,這三筆的資料6、15、28加總而成的。(SS→XXL數量皆同,是因為方便計算,實際上各尺寸的數量是完全不同的。)
(以而附檔中因為我是手動一筆一筆去寫的,所以會看到是「=6+15+28」的呈現,但希望可以直接顯示加總後的值就可以了)
------
附檔:[attach]31812[/attach]
附上附檔,再拜託各位大大,抽空協助提供想法,謝謝您們。
(如對發問有任何疑問,請再留言,我將會回覆,謝謝。)
作者:
Kubi
時間:
2020-3-24 16:40
執行後發現
3/21我的數據是185
3/25我的數據是106
不知是哪邊出了問題?
作者:
gaishutsusuru
時間:
2020-3-24 16:56
回復
2#
Kubi
謝謝您的回覆,不好意思,因為是手動輸入,所以出現2筆錯誤的資料,但您的值是正確的喔。
3/21我的數據是185
您是對的,因為我手動輸入時,把「3_1 15O 2020/3/13 2020/3/21」的值「27」誤植進去了。
3/25我的數據是106
您是對的,因為我手動輸入時,把「1_1 3C 2020/3/6 2020/3/25」的值「2」誤植進去了。
作者:
准提部林
時間:
2020-3-24 17:23
開始與結束日, 有否可能同一天???
作者:
gaishutsusuru
時間:
2020-3-24 21:55
本帖最後由 gaishutsusuru 於 2020-3-24 21:58 編輯
回復
4#
准提部林
准提大大您好,
您說的情況一般來說是不會發生的,但如果像下面這個例子的話:
例:
第一筆 2020/4/1 2020/4/1:6
第二筆 2020/4/1 2020/4/5 :3
則2020/4/1希望是以
比較大的值
去計:6
-----
另外,想再麻煩准提大大與各位版上大大,因為帖子已發帖經過15分鐘了,所以不能再進行更新。而關於問題,因為實際上的操作,需要再做進一步的處理,所以將問題新增在下方:
[attach]31813[/attach]
(圖片中僅是示意部份。完整的資料,請再參考附檔)
原始資料:(新增)
(6) L欄:特殊1。亦即將B欄(種類)手動挑出來歸類在特殊1。 (資料範圍:L2~L20)
(7) M欄:特殊2。亦即將B欄(種類)手動挑出來歸類在特殊2。 (資料範圍:M2~M20)
--
處理後呈現:(更改:從原本1個表更改成3個表)
1. 一般
B欄種類裡,排除「特殊1」、「特殊2」以外的,都歸類在「一般」。(而B欄的種類目前是列到15種,但實際上可能會變多)
(1) O欄:一般
(2) P欄:列出日期。以種類符合「一般」的,列出從C欄(最早開始日期)為始,至D欄(最晚結束日期)為末。
(3) Q欄~V欄:各尺寸數量計算。
2. 特殊1
(1) Y欄:特殊1
(2) Z欄:列出日期。以種類符合「特殊1」的,列出從C欄(最早開始日期)為始,至D欄(最晚結束日期)為末。
(3) AA欄~AF欄:各尺寸數量計算。
3. 特殊2
(1) AI欄:特殊2
(2) AJ欄:列出日期。以種類符合「特殊2」的,列出從C欄(最早開始日期)為始,至D欄(最晚結束日期)為末。
(3) AK欄~AP欄:各尺寸數量計算。
新的附檔:[attach]31814[/attach]
真的不好意思,題目沒有立即更新上去。希望各位大大能再抽空協助,非常感謝。
作者:
准提部林
時間:
2020-3-25 12:21
有點複雜, 自行參酌~~
Sub TEST()
Dim Arr, xD(3), d1, d2, i&, j&, k%, U%, Ur, Srr, xS As Worksheet
For j = 0 To 3: Set xD(j) = CreateObject("Scripting.Dictionary"): Next j
Arr = [L2:M30]
For j = 1 To 2: For i = 1 To UBound(Arr)
If Arr(i, j) <> "" Then xD(0)(Arr(i, j)) = j
Next: Next
'--------------------------------
Arr = Range([J1], Cells(Rows.Count, 1).End(xlUp))
For i = 2 To UBound(Arr)
d1 = Arr(i, 3): d2 = Arr(i, 4)
If IsDate(d1) * IsDate(d2) = 0 Then GoTo 101
U = xD(0)(Arr(i, 2)) + 1
For j = d1 To d2 - 1
Ur = xD(U)(j)
If Not IsArray(Ur) Then Ur = Array(CDate(j), 0, 0, 0, 0, 0, 0)
For k = 5 To 10: Ur(k - 4) = Ur(k - 4) + Arr(i, k): Next k
xD(U)(j) = Ur
Next j
101: Next i
'--------------------------------
Srr = Array("", "一般", "特殊1", "特殊2")
For k = 1 To 3
With Sheets(Srr(k))
.UsedRange.Offset(1, 0).EntireRow.Delete
U = xD(k).Count: If U = 0 Then GoTo 102
With .[B2:H2].Resize(U)
.Value = Application.Transpose(Application.Transpose(xD(k).items))
.Sort Key1:=.Item(1), Order1:=xlAscending, Header:=xlNo
End With
End With
102: Next k
End Sub
複製代碼
[attach]31815[/attach]
==============================
作者:
Kubi
時間:
2020-3-26 14:33
回復
5#
gaishutsusuru
程式有點長,請參考。
注意:本程式碼無法照顧到你所說的例子(希望是以比較大的值去計)
[attach]31818[/attach]
作者:
gaishutsusuru
時間:
2020-3-26 16:52
回復
6#
准提部林
謝謝准提大大的回覆,
您的檔案測試後,資料是分別顯示在3個工作表裡
想請問該怎麼用,才可以全部顯示在「工作表1」裡面呢?(如同我附檔裡的一樣,都顯示在工作表1裡面)
再麻煩您抽空協助提供想法,謝謝您。
作者:
gaishutsusuru
時間:
2020-3-26 17:04
回復
7#
Kubi
謝謝Kubi大大您的回覆哦,我先參考看看囉。
作者:
准提部林
時間:
2020-3-26 17:11
回復
8#
gaishutsusuru
已修改:
[attach]31820[/attach]
作者:
gaishutsusuru
時間:
2020-3-26 17:26
回復
10#
准提部林
謝謝准提大大的回覆,很感謝您的協助。
作者:
准提部林
時間:
2020-3-27 11:46
回復
11#
gaishutsusuru
若各類匯總結果固定最多6000筆, 可稍簡化:
Sub TEST()
Dim Arr, Brr, xD, r&, c%, i&, j&, k%, N&(2), Sr As Range
[O2:AP6000].Clear: Brr = [O2:AP6000]
Set xD = CreateObject("Scripting.Dictionary")
For Each Sr In [L2:M30]
k = 1 - k: If Sr <> "" Then xD(Sr & "/") = 2 - k
Next
'--------------------------------
Arr = Range([J1], Cells(Rows.Count, 1).End(xlUp))
For i = 2 To UBound(Arr)
If IsDate(Arr(i, 3)) * IsDate(Arr(i, 3)) = 0 Then GoTo 101
c = xD(Arr(i, 2) & "/")
For j = Arr(i, 3) To Arr(i, 4) - 1
r = xD(j & "|" & c)
If r = 0 Then N(c) = N(c) + 1: r = N(c): xD(j & "|" & c) = r
Brr(r, c * 10 + 2) = CDate(j)
For k = 3 To 8: Brr(r, c * 10 + k) = Brr(r, c * 10 + k) + Arr(i, k + 2): Next k
Next j
101: Next i
'''--------------------------------
[O2:AP6000] = Brr
For Each Sr In Range("P2,Z2,AJ2")
Sr.Resize(6000, 7).Sort Key1:=Sr, Order1:=xlAscending, Header:=xlNo
Next
MsgBox "~~分類加總完成~~ "
End Sub
複製代碼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)