商品明细帐

1 技术要点

报表。

根据周期分:日报、月报、年报,或可设置开始结束日期的报表。


2 功能描述

img

输入查询条件:商品编号、日期开始、日期结束,根据商品编号自动带出商品的基本信息:商品名称、类型、重量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设置公式,这里用来求合计。