商品明细帐
1 技术要点
报表。
根据周期分:日报、月报、年报,或可设置开始结束日期的报表。
2 功能描述
输入查询条件:商品编号、日期开始、日期结束,根据商品编号自动带出商品的基本信息:商品名称、类型、重量KG、进价、零售价、批发价。
点击查询按钮,查询明细:每笔入库明细与出库明细的单价、数量、金额,以及最后的结存数量与结存金额。
查询结果要求
按日期排序,针对供应商与客户分别记录入库项与出库项,最后一行添加合计,统计:入库的合计数量与合计金额、出库的合计数量与合计金额、结存的合计数量与合计金额。
3 主要步骤
步骤1:清空查询结果区数据
步骤2:获取要查找的条件
步骤3:遍历入库明细。判断是否符合条件,符合条件则添加到结果
步骤4:遍历出库明细。判断是否符合条件,符合条件则添加到结果
步骤5:按日期排序
步骤6:计算合计
4 完整代码
Sub query()
'声明变量
Dim rowIndexNew As Integer
Dim flag As Boolean
'步骤1:清空数据
rowIndexLast = Worksheets("C01商品明细帐").Range("B15").End(xlDown).Row
Worksheets("C01商品明细帐").Range("15:" & rowIndexLast).delete
'步骤2:获取要查找的条件
productId = Worksheets("C01商品明细帐").Range("B5").Value
dateBegin = Worksheets("C01商品明细帐").Range("C5").Value
dateEnd = Worksheets("C01商品明细帐").Range("D5").Value
'步骤3:遍历入库明细
rowIndexNew = 15
For i = 2 To Worksheets("A0502入库明细").Range("A1").End(xlDown).Row
'步骤3-1:判断是否符合条件
flag = True
flag = flag And ((productId = "") Or (Worksheets("A0502入库明细").Range("G" & i).Value = productId))
flag = flag And ((dateBegin = "") Or (dateBegin <= Worksheets("A0502入库明细").Range("F" & i).Value))
flag = flag And ((dateEnd = "") Or (DateAdd("d", 1, dateEnd) > Worksheets("A0502入库明细").Range("F" & i).Value))
If flag Then
'Worksheets("C01商品明细帐").Range("B" & rowIndexNew & ":G" & rowIndexNew).Value = Worksheets("A0502入库明细").Range("A" & i & ":F" & i).Value
Worksheets("C01商品明细帐").Range("B" & rowIndexNew).Value = Worksheets("A0502入库明细").Range("F" & i).Value '日期
Worksheets("C01商品明细帐").Range("C" & rowIndexNew).Value = Worksheets("A0502入库明细").Range("C" & i).Value '供应商名称
Worksheets("C01商品明细帐").Range("D" & rowIndexNew & ":F" & rowIndexNew).Value = Worksheets("A0502入库明细").Range("N" & i & ":P" & i).Value
rowIndexNew = rowIndexNew + 1
End If
Next
'步骤4:遍历出库明细
For i = 2 To Worksheets("A0602出库明细").Range("A1").End(xlDown).Row
'判断是否符合条件
flag = True
flag = flag And ((productId = "") Or (Worksheets("A0602出库明细").Range("G" & i).Value = productId))
flag = flag And ((dateBegin = "") Or (dateBegin <= Worksheets("A0602出库明细").Range("F" & i).Value))
flag = flag And ((dateEnd = "") Or (DateAdd("d", 1, dateEnd) > Worksheets("A0602出库明细").Range("F" & i).Value))
If flag Then
Worksheets("C01商品明细帐").Range("B" & rowIndexNew).Value = Worksheets("A0602出库明细").Range("F" & i).Value
Worksheets("C01商品明细帐").Range("C" & rowIndexNew).Value = Worksheets("A0602出库明细").Range("C" & i).Value
Worksheets("C01商品明细帐").Range("G" & rowIndexNew & ":I" & rowIndexNew).Value = Worksheets("A0602出库明细").Range("N" & i & ":P" & i).Value
rowIndexNew = rowIndexNew + 1
End If
Next
'步骤5:按日期排序
Worksheets("C01商品明细帐").Range("B15:K" & (rowIndexNew - 1)).Sort key1:=Worksheets("C01商品明细帐").Range("B15"), Header:=xlGuess
'步骤6:计算合计
Worksheets("C01商品明细帐").Range("B" & rowIndexNew).Value = "合计"
Worksheets("C01商品明细帐").Range("E" & rowIndexNew).Formula = "=SUM(E14:E" & (rowIndexNew - 1) & ")"
Worksheets("C01商品明细帐").Range("F" & rowIndexNew).Formula = "=SUM(F14:F" & (rowIndexNew - 1) & ")"
Worksheets("C01商品明细帐").Range("H" & rowIndexNew).Formula = "=SUM(H14:H" & (rowIndexNew - 1) & ")"
Worksheets("C01商品明细帐").Range("I" & rowIndexNew).Formula = "=SUM(I14:I" & (rowIndexNew - 1) & ")"
Worksheets("C01商品明细帐").Range("J" & rowIndexNew).Formula = "=E" & rowIndexNew & "-H" & rowIndexNew
Worksheets("C01商品明细帐").Range("K" & rowIndexNew).Formula = "=F" & rowIndexNew & "-I" & rowIndexNew
End Sub
5 代码讲解
Range.Sort用于排序,这里根据日期进行排序。
Range.Formula设置公式,这里用来求合计。