remembering you钢琴谱:Excel 请教多条件选择性查询数据 - ExcelVBA程序开发 - Excel Hom...

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 07:24:43
根据输入的查询条件,请高人用函数或VBA实现查找数据功能。
1查询数据---记录日期:根据查询条件中的产品名称,不良项目以及开始日期和结束日期查找《数据表》中的符合条件的记录日期。超出查找日期范围的不记录或空白显示。
2查询数据---不良数量:搜索《数据表》中同时满足查询条件的合计不良数量.
如果查询条件中只选产品名称未选不良项目时,统计这个产品的所有不良项目的合计不良数;如果查询条件中只选不良项目未选产品名称时,统计所有产品的查询的不良项目的合计不良数;
3查询数据---投入数量,同不良数量对应关系
如果查询条件中只选产品名称未选不良项目时,统计这个产品的所有不良项目的合计投入数;如果查询条件中只选不良项目未选产品名称时,统计所有产品的查询的不良项目的合计投入数;
Sub Macro2()
    Dim c As Range, Mydate1 As Date, Mydate2 As Date, arr, brr(), x As WorksheetFunction
    Dim i As Long, r1 As Long, r2 As Long, m As Integer
    Set x = WorksheetFunction
    Mydate1 = [d2]
    Mydate2 = [j2]
    Set d = CreateObject("Scripting.Dictionary")
    With Sheets("数据")
        arr = .Range("B3:g" & .Range("B65536").End(xlUp).Row)
        For i = 1 To UBound(arr)
            If arr(i, 1) >= Mydate1 Then
                r1 = i
                Exit For
            End If
        Next
        For i = 1 To UBound(arr)
           If arr(i, 1) > Mydate2 Then
                r2 = i - 1
                Exit For
            End If
        Next
        If r1 >= 0 And r2 >= r1 Then
            For i = r1 To r2
                If Not d.exists(arr(i, 1)) Then
                    m = m + 1
                    d(arr(i, 1)) = m
                    ReDim Preserve brr(1 To 3, 1 To m)
                    brr(1, m) = x.Sum(.Cells(i + 2, 8).Resize(1, 17)) '不良h列从到x列
                    brr(2, m) = arr(i, 6)
                Else
                    brr(1, d(arr(i, 1))) = brr(1, d(arr(i, 1))) + x.Sum(.Cells(i + 2, 8).Resize(1, 17)) '不良h列从到x列
                    brr(2, d(arr(i, 1))) = brr(2, d(arr(i, 1))) + arr(i, 6)
                End If
            Next
            For i = 1 To m
                If brr(2, i) > 0 Then brr(3, i) = brr(1, i) / brr(2, i)
            Next
            Cells(5, 2).Resize(4, 255).ClearContents
            Cells(5, 2).Resize(1, m) = d.keys
            Cells(6, 2).Resize(3, m) = brr
        End If
    End With
End Sub

TOP