2013-11-15 62 views
0

我有一个代码可以完成我所需要的操作。问题是我必须做手动范围选择我想创建一个条件循环。VBA基于列A中的值创建列B的循环

这里是我的代码,我用到目前为止

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 

此刻我手动我选择从上而下基于体积列价格栏中的值。

的条件是

  1. 如果价格是一样继续选择他们,直到他们不是

  2. 如果价格下跌则这些选定的单元格应该在E4进行相加,并加入到H4

  3. 如果价格上涨,那么这些选定的单元格应在E来概括,并添加到H4

在我的例子,这将是这样的:

   (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) 

任何建议上

  1. 如何使用条件,使之循环?

  2. 如何写,在考虑采取的最后价格代码?

+0

你描述它的方式,它将在H4中被“总结”。或者我错过了什么。你对预期结果的描述也很模糊。请详细说明。 – L42

+0

是的,价格下跌的总和在H4,而价格上涨的总和在H2。 我会编辑预期的结果来尝试使之更清晰 – user2989803

+0

啊所以它必须是'H4:100 + 50 + 80,100 + 50,100 + 100'然后'H2:50 + 250'吧? – L42

回答

0

这里有一种方式来获得你想要的东西。
这是很困难的创建loopNested If's做到这一点。
我让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)) 

将公式复制一路下跌,直到E10或最多到您的数据。

H2,在式栏中键入这样的:在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 

有点晚了,但我h这是你想要的。

+0

我知道这个代码有多困难,特别是我的“需求”,这是不明确的,很难界定。但是你做到了,它正在做我自己该做的事情。我几周来一直在努力研究使它更简单的不同解决方案,所以即使我不擅长VBA,我仍然可以编写它。但迄今为止没有任何工作。我非常沮丧,我不能够感谢你! “L42”感谢您给予您的时间和精力来帮助我!并感谢作为一个惊人的网站stackoverflow。 – user2989803

+0

你非常欢迎。我还从VBA Gurus那里学到了很多非常慷慨的东西。我只活出自己的榜样,以最好的方式帮助别人。很高兴它帮助你。 – L42

+0

btw,你可以进一步简化上面的公式给这个公式:= IF(ISNUMBER(A1),IF(A1 L42

相关问题