Loops VBA基于A列中的值为B列创建循环
我有一个代码可以满足我的需要。问题是我必须手动选择范围,我想创建一个条件循环 这是我目前使用的代码Loops VBA基于A列中的值为B列创建循环,loops,excel,if-statement,vba,Loops,Excel,If Statement,Vba,我有一个代码可以满足我的需要。问题是我必须手动选择范围,我想创建一个条件循环 这是我目前使用的代码 Sub Worksheet_functions() Dim Sumtotal As Long Sumtotal = WorksheetFunction.Sum(Selection) Range("e2").Value = Sumtotal Range("h2").Value = Range("e2") + Range("h2") End Sub 这就是我的数据
Sub Worksheet_functions()
Dim Sumtotal As Long
Sumtotal = WorksheetFunction.Sum(Selection)
Range("e2").Value = Sumtotal
Range("h2").Value = Range("e2") + Range("h2")
End Sub
这就是我的数据
Price Volume E H
10 100
10 50
10 80
9 100
9 50
8 100
8 100
10 50
10 250
目前,我正在根据price列中的值从上到下手动选择volume列
条件是
( H2: 100+50+80 +50+250 = 530 )
( H4: 100+50 +100+100 = 350 )
Price Volume
( 10 100
100+50+80 < ( 10 50
( 10 80
Above volume to H2
(9 100
100+50 < (9 50
Above volume to H4 ( because 10>9)
(8 100
100+100 < (8 100
Above volume to H4 ( because 9>8)
(10 50
50+250 < (10 250
Above volume to H2 ( because 8<10)
(H2:100+50+80+50+250=530)
(H4:100+50+100+100=350)
价格量
( 10 100
100+50+80 < ( 10 50
( 10 80
以上体积为H2
(9 100
100+50 < (9 50
高于H4的体积(因为10>9)
(8 100
100+100 < (8 100
高于H4的体积(因为9>8)
(10 50
50+250 < (10 250
以上体积为H2(因为8这里有一种方法可以得到你想要的。
要创建循环
和嵌套If来实现这一点非常困难。
我让Excel
来做这项工作,并使用Formula
假设您的数据位于A1:B10
在E2中,在公式栏中键入此项。
=IF(A2=A3,IF(ISNUMBER(A1),IF(A1<A2,1,IF(A1=A2,E1,0)),1),IF(ISNUMBER(A1),IF(A1<A2,1,IF(A1=A2,E1,0)),1))
类似地,在H4
中,在公式栏中键入:
=SUMIF(E:E,1,B:B)
=SUMIF(E:E,0,B:B)
但是,您希望VBA中的代码也使用上述公式:
Dim ws as Worksheet, lrow as long
Set ws = Thisworkbook.Sheets("Sheet1")'assuming your data is in Sheet1
With ws
lrow = .Range("A" & .Rows.Count).End(xlUp).Row
.Range("E2:E" & lrow).Formula = "=IF(A2=A3,IF(ISNUMBER(A1),IF(A1<A2,1,IF(A1=A2,E1,0)),1),IF(ISNUMBER(A1),IF(A1<A2,1,IF(A1=A2,E1,0)),1))"
.Range("E2:E" & lrow).Value = .Range("E2:E" & lrow).Value
.Range("H2").Formula = "=SUMIF(E:E,1,B:B)"
.Range("H2").Value = .Range("H2").Value
.Range("H4").Formula = "=SUMIF(E:E,0,B:B)"
.Range("H4").Value = .Range("H4").Value
End With
End Sub
将ws作为工作表进行尺寸标注,将lrow作为长
假设数据位于Sheet1中,则设置ws=Thisworkbook.Sheets(“Sheet1”)'
与ws
lrow=.Range(“A”&.Rows.Count).End(xlUp).Row
.Range(“E2:E”和lrow)。公式=“=IF(A2=A3,IF(ISNUMBER(A1),IF(1)按照你的描述,它只会在H4中求和。或者我遗漏了什么。你对预期结果的说明也很模糊。请详细说明。是的,价格下跌时的总和在H4中,价格上涨时的总和在H2中。我将编辑预期结果,使其更清晰所以它一定是H4:100+50+80,100+50,100+100
然后H2:50+250
对吗?好的,我明白了。现在正在处理可能的代码…)将体积视为区块。前3个区块进入H2。然后价格变化为9。9比10小,因此9的区块进入H4。8比9小,因此8的区块进入H4。10比8大,因此10的区块进入H2。我知道我需要一些用于循环,如果声明我知道这有多困难e就是要弄清楚,尤其是我的“要求”"这是不清楚的,很难定义。但你做到了,它正在做我想做的。我已经为此奋斗了几个星期,试图找出不同的解决方案,使它更简单,所以,即使我不是很好的VBA,我可以写它无论如何。但迄今为止没有任何工作。我一直很沮丧,我不能感谢你够了!“L42”谢谢你给我时间和精力来帮助我!谢谢stackoverflow是一个很棒的网站。非常欢迎你。我也从这里的VBA大师那里学到了很多东西,他们非常慷慨。我只是按照他们的榜样生活,尽我所能帮助别人。很高兴它帮助了你。顺便说一句,你可以进一步简化t将上述公式转换为该公式=IF(ISNUMBER(A1),IF(A1