如何使用Excel搜索多个数据并自动填充求和

发布网友 发布时间:2022-04-22 10:36

我来回答

1个回答

热心网友 时间:2022-06-06 21:45

展开3全部

先创建自定义函数:allLookup(被查找值,数据区域,返回行偏移量,返回列偏移量,首表编号,末表编号,模糊查询,是否查询全部)

被查找值:需要查找的内容,如本例中”描述“所在单元格。

数据区域:在何处查找。注意,选定的范围应该包括返回值所在区域。如本例中可设为D6:K21

返回行偏移量:找到被查找值后,需返回结果相对的行偏移量。如本例中为0(行不变)

返回列偏移量:找到被查找值后,需返回结果相对的行偏移量。如本例中为1(右侧一列)

首表编号:需要查找的区域的第一个工作表编号(自最左边开始计数),如本例中5

末表编号:需要查找的区域的最后一个工作表编号(自最左边开始计数),如本例中5

注意:虽然sheet名为sheet6,但从左数,它是第5个。

模糊查询:是否模糊查询。是=1,否=0。默认为0。当选择模糊查询,指字符内容互相包含。本例为否。

是否查询全部:是=1,找全部,否=0,找第一个。本例为是。

所以公式为:

=SUMPRODUCT(alllookup("张三",D6:K21,0,1,5,5,0,1))

附代码:

Public Function allLookup(findValue, targetAreas, rowOffset%, columnOffset%, _

fristSheetNo%, lastSheetNo%, Optional fuzzySearch As Boolean = 0, Optional lookupAll As Boolean = 0)


Dim Rslt(10), t%

For sh = fristSheetNo To lastSheetNo

    x = Sheets(sh).Range(targetAreas.Address)

    For i = 1 To UBound(x, 1)

        For j = 1 To UBound(x, 2)

            If Not IsEmpty(x(i, j)) Then

                If fuzzySearch Then

                    If InStr(x(i, j), findValue) > 0 Or InStr(findValue, x(i, j)) > 0 Then

                        Rslt(t) = x(i + rowOffset, j + columnOffset)

                        t = t + 1

                        If lookupAll = 0 Then Exit For

                    End If

                Else

                    If findValue = x(i, j) Then

                        Rslt(t) = x(i + rowOffset, j + columnOffset)

                        t = t + 1

                        If lookupAll = 0 Then Exit For

                    End If

                End If

            End If

        Next

        If lookupAll = 0 And j < UBound(x, 2) Then Exit For

    Next

    If lookupAll = 0 And i < UBound(x, 1) Then Exit For

Next sh

If t = 0 Then

allLookup = CVErr(xlErrNA)

Else

ReDim Rslt1(1 To t)

For i = 1 To t

Rslt1(i) = Rslt(i - 1)

Next

allLookup = Rslt1

End If

End Function

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com