標題:
[發問]
請問特定欄位的計算
[打印本頁]
作者:
bridetobe
時間:
2014-7-11 09:03
標題:
請問特定欄位的計算
[attach]18680[/attach]
想請問一下
如果我想在小計欄後面新增一條使用量
就是比如將7/9的"#702"小計欄的數字抓出來
然後用7/10的"#702"小計欄數字減去7/9的數字
如果前一天抓不到 就顯示0
因為資料排序會變動(EX:以小計遞增排序或是以日期排序或是以品名排序)
無法用特定欄位相減
有變動的資料
這個部份有辦法作起來嗎
作者:
Hsieh
時間:
2014-7-11 10:53
回復
1#
bridetobe
只計算前一天的用量嗎?
試試看
H2公式
=SUMPRODUCT((OFFSET($A$2,,,COUNT(A:A),)=A2-1)*(OFFSET($B$2,,,COUNT(A:A),)=B2)*OFFSET($G$2,,,COUNT(A:A),))
向下複製
[attach]18684[/attach]
作者:
bridetobe
時間:
2014-7-17 08:42
回復
2#
Hsieh
不好意思 前面有點描述錯誤
應該是昨天的小計+昨天的進貨-今天的小計
在附上一次檔案
[attach]18710[/attach]
7/4的#702使用量就是昨天的小計24+昨天的進貨34-今天的小計34=8
這樣子
如果計算出來是負數 就寫0
這樣子呢?
作者:
Hsieh
時間:
2014-7-17 09:41
回復
3#
bridetobe
H2公式
=MAX(0,(SUMPRODUCT(($B$2:$B$1063=B2)*($A$2:$A$1063=A2-1)*$C$2:$C$1063)+SUMPRODUCT(($B$2:$B$1063=B2)*($A$2:$A$1063=A2-1)*$G$2:$G$1063))-SUMPRODUCT(($B$2:$B$1063=B2)*($A$2:$A$1063=A2)*$G$2:$G$1063))
作者:
bridetobe
時間:
2014-7-17 10:03
回復
4#
Hsieh
了解 非常感激!!!
作者:
bridetobe
時間:
2014-8-15 21:30
回復
4#
Hsieh
版大 不好意思 我想請問一下
因為後來使用上有兩個很大的問題
不知道如何解決
1.因為如果遇到星期一 就是以星期五當做前一天 但是預設是減一天 所以星期一的就無法計算
ex 7/21的#722小計是10
7/18的#722小計是11
照這樣來說 使用量應該是1
但是因為遇到六日 沒辦法計算
這有辦法解決嗎?
2.由於資料會一直新增
H2公式=MAX(0,(SUMPRODUCT(($B$2:$B
$1063
=B2)*($A$2:$A$1063=A2-1)*$C$2:$C$1063)+SUMPRODUCT(($B$2:$B$1063=B2)*($A$2:$A$1063=A2-1)*$G$2:$G$1063))-SUMPRODUCT(($B$2:$B$1063=B2)*($A$2:$A$1063=A2)*$G$2:$G$1063))
如此一來 紅字部分就必須再每天修改後 再去一一修改參照到最下面那列 然後在向下複製
不知道這部分有沒有辦法解決
最主要的問題是第1點
如果函數部分沒辦法解決
是否有其他較好的方法可以算出使用量?
謝謝
附上說明檔案說明上面的ex
[attach]18925[/attach]
作者:
GBKEE
時間:
2014-8-16 09:12
本帖最後由 GBKEE 於 2014-8-16 11:50 編輯
回復
6#
bridetobe
試試看
Option Explicit
Sub 讀出()
Dim a_date, Rng(1 To 2) As Range
Application.Calculation = xlCalculationManual '手動計算
Application.StatusBar = False
With Sheets("操作")
Set Rng(1) = .[A2:F2]
Set Rng(2) = .Cells(1, .Columns.Count)
.Range(Rng(1)(2, 1), Rng(1).End(xlDown)).Resize(, 7) = ""
.[B1].Value = InputBox("輸入日期(例2014/7/1):", , "2014/7/1")
Rng(2) = "日期"
Rng(2).Offset(1) = .[B1]
'AdvancedFilter 進階篩選
'進階篩選:的準則範圍 -> Rng(2).Resize(2)
Sheets("存貨資料").UsedRange.AdvancedFilter xlFilterCopy, Rng(2).Resize(2), Rng(1)
Rng(2).EntireColumn = ""
If Rng(1).End(xlDown).Row <> .Rows.Count Then
Set Rng(2) = Rng(1).Cells(2, 1)
Do While Rng(2) <> ""
Rng(2).Cells(1, "G") = 上一個小計(.[B1], Rng(2).Text) - Rng(2).Cells(1, "F")
If Rng(2).Cells(1, "G") < 0 Then Rng(2).Cells(1, "G") = 0
Set Rng(2) = Rng(2).Cells(2)
Loop
MsgBox "Ok"
Else
MsgBox "沒有資料"
End If
End With
' Application.Calculation = xlAutomatic '自動計算
'自動篩選後會有工作表重算的動作,程式會等候重算完畢,再繼續執行下去.
End Sub
'AutoFilter: 自動篩選
Private Function 上一個小計(日期 As String, 品名 As String) As Integer
Dim Rng As Range
With Sheets("存貨資料").UsedRange
'自動計算:當自動篩選後會有工作表重算的動作,影響程式執行的速度
'自動篩選 指定欄位,準則
.AutoFilter 1, ">" & 日期
.AutoFilter 2, "=" & 品名
Set Rng = .SpecialCells(xlCellTypeVisible)
If Rng.Areas(1).Rows.Count > 1 Then
上一個小計 = Rng.Areas(1).Cells(2, "g")
Else
上一個小計 = Rng.Areas(2).Cells(1, "g")
End If
End With
End Function
複製代碼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)