Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops VBA基于A列中的值为B列创建循环_Loops_Excel_If Statement_Vba - Fatal编程技术网

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列

条件是

  • 如果价格相同,则继续选择,直到价格不一致为止

  • 如果价格下降,那么这些选定的单元格应加在e4中,并添加到h4中

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