2013-11-15 91 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

相關問題