EXCEL多条件查找怎么编写自定义函数

本来有函数=SUMIFS(Sheet1D:D,Sheet1P:P,a,Sheet1U:U,b)但是运用的时候需要判断很多情况,一行中要重复好几次公式,这样公式就太长了于是... 本来有函数=SUMIFS(Sheet1D:D,Sheet1P:P,a,Sheet1U:U,b)
但是运用的时候需要判断很多情况,一行中要重复好几次公式,这样公式就太长了
于是根据网上的改了个自定义函数用以简化公式
Function 整理(a, b)
Dim i As IntegerFor i = 1 To 25000
If Sheet1.Cells(i, 16) = a And Sheet1.Cells(i, 21) = b Then 整理 = Sheet1.Cells(i, 4)
If 整理 > 0 Then Exit For
NextEnd
Function
但是这么一来,公式变得很卡,原来的公式一瞬间就可以计算数百行,自定义的这个几乎肉眼可见的速度一行一行出结果...
是因为用了循环吗?这个情况怎么破啊?
有办法不用循环就实现VBA的多条件查找吗?
展开
 我来答
unsamesky
2013-06-14 · TA获得超过2734个赞
知道小有建树答主
回答量:859
采纳率:100%
帮助的人:421万
展开全部

你把自定义函数修改成这样的试试:

Function 整理(Byval Rng as Range, a , b)
    If Rng = a And Rng.Offset(0,5) = b Then 整理 = Rng.Offset(0, -12).Value
End Function

然后在你需要返回值的单元格输入如下公式: =整理(P19,2,4) 

那么这个函数就会自动比对P19单元格是否等于a,U19单元格是否等于b,如果都成立,那么整理返回D19单元格的值。

如果不用函数,就直接用Sub,一次性转换数据:

Sub 整理数据()
Dim i As Integer, a,b
a = 100
b = 60
For i = 1 To 25000
If Sheet1.Cells(i, 16) = a And Sheet1.Cells(i, 21) = b Then Sheet n.Cells(i, x) = Sheet1.Cells(i, 4)
Next
End Sub
更多追问追答
追问
你这个得输入P19啊,我要的是只填入A和B,就在整个Sheet1里面查找满足P列=A,U列=B的一行然后获取这一行的D列的值
追答
你的函数,每统计一次就要循环25000次,所以速度会很慢。

因为我看你用了自定义函数,那么肯定是在某一个单元格里面使用自定义函数,所以我将你的代码略作修改,不过从你的代码我无法判断你的真实意图。
你可以大致说一下,你函数实现的目的,我才好根据情况具体分析!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式