VBA基于A列中的值为B列创建循环

时间:2013-11-15 08:47:19

标签: excel loops excel-vba 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

这就是我的数据

         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. 如果价格上涨,那么这些选定的单元格应该在e2中求和并添加到h4

  4. 对于我的例子,这看起来像:

                  ( 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. 如何编写考虑最后价格的代码?

1 个答案:

答案 0 :(得分: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中,在公式栏中输入:

=SUMIF(E:E,1,B:B)

同样在H4中,在公式栏中输入:

=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

有点迟了,但我希望这就是你想要的。