excel如何用VBA实现一列满足多个条件的循环计数程序?比如:c列有很多数据,在B列的B1求出满

excel如何用VBA实现一列满足多个条件的循环计数程序?比如:c列有很多数据,在B列的B1求出满足C列中大于C1-2以及小于C1+2的值的个数,同理,B2的值为C列中大... excel如何用VBA实现一列满足多个条件的循环计数程序?比如:c列有很多数据,在B列的B1求出满足C列中大于C1-2以及小于C1+2的值的个数,同理,B2的值为C列中大于C2-2以及小于C2+2的值的个数。如果C列有某个值为0,则对应B列的值也为0。
用sumproduct函数可以实现,但非常的卡,有2000行的数据,求高手解答,非常感谢!
展开
 我来答
鱼木混猪哟
高粉答主

2016-01-09 · 专注Office,尤其Excel和VBA
鱼木混猪哟
采纳数:6078 获赞数:33697

向TA提问 私信TA
展开全部
这个用countifs应该很好实现,不卡吧
=IF(C1=0,0,COUNTIFS(C:C,">"&C1-2,A:A,"<"&C1+2))
你试试
不行,再给你写代码
更多追问追答
追问
因为数据很大,所以函数用多了很卡,表格打开也很慢,我用了两个for循环,数据对不上,也有点慢,好像要用字典,但不会啊
追答
字典我试过,没有啥好办法,想用字典作为数值,结合Countifs函数,计算结果,出错了。
下面是数组,结果还行,我电脑上运行10s左右吧,你试试看:
Sub m()
Dim brr(2000)
arr = Range("C1:C2000")
For i = 1 To UBound(arr)
k = 0
For j = 1 To UBound(arr)
If arr(j, 1) > arr(i, 1) - 2 And arr(j, 1) < arr(i, 1) + 2 Then
k = k + 1
End If
Next j
brr(i - 1) = k
Next i
[B1].Resize(2000, 1) = Application.Transpose(brr)
End Sub
一支穿云箭abc
2016-01-09 · 超过80用户采纳过TA的回答
知道小有建树答主
回答量:413
采纳率:44%
帮助的人:108万
展开全部
大于小于是和谁做比较 最好截个图来 说清楚意图
更多追问追答
追问
是C列中所有的值满足大于小于的个数
追答
sub a()
dim arr(1 to 2000,1),arr1(1 to 2000,1),x,y,h
arr=range("c1:c2000")
for x=1 to 2000
for y=1 to 2000
if arr(x,1)=0 then
arr1(x,1)=0
elseif arr(x,1)arr(y,1)-2 then
h=h+1
arr1(x,1)=h
next y
next x
endif
range("b1").resize(2000)=arr1
end sub
用的最简单的循环完成,手机输入没验证,粘贴代码,自己修改下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
零點情人
2016-01-09 · 超过34用户采纳过TA的回答
知道答主
回答量:116
采纳率:25%
帮助的人:27.9万
展开全部
问一下,是要从B1到B2到B3直到Bn, 都要设置吗?
追问
是啊,要做循环
追答
Sub 秙1_Click()
For i = 1 To Sheet2.UsedRange.Rows.Count
Dim num As Integer
num = 0
For k = 1 To Sheet2.UsedRange.Rows.Count
Cnum = Sheet2.Range("C" & i).Value
Cnum2 = Sheet2.Range("C" & k).Value
If Cnum2 > Cnum - 2 And Cnum2 < Cnum + 2 Then
num = num + 1
End If
Next k
Sheet2.Range("B" & i).Value = num
Next i
End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式