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的多条件查找吗? 展开
但是运用的时候需要判断很多情况,一行中要重复好几次公式,这样公式就太长了
于是根据网上的改了个自定义函数用以简化公式
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的多条件查找吗? 展开
展开全部
你把自定义函数修改成这样的试试:
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次,所以速度会很慢。
因为我看你用了自定义函数,那么肯定是在某一个单元格里面使用自定义函数,所以我将你的代码略作修改,不过从你的代码我无法判断你的真实意图。
你可以大致说一下,你函数实现的目的,我才好根据情况具体分析!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |