Board logo

標題: [發問] VBA加總問題 [打印本頁]

作者: sandra_wang    時間: 2010-12-14 19:38     標題: VBA加總問題

資料從第九欄開始,一直到第n欄,如果第一列的標題(#_1, #_2...#_n)不是空白,
就把Cells(2,9)....Cells(2,n)欄位的數字加總,把加總的結果填到Cells(2,2)
就把Cells(3,9)....Cells(3,n)欄位的數字加總,把加總的結果填到Cells(3,2)
就把Cells(4,9)....Cells(4,n)欄位的數字加總,把加總的結果填到Cells(4,2)
請大家幫我解答一下好嗎? 謝謝!
作者: GBKEE    時間: 2010-12-14 20:34

本帖最後由 GBKEE 於 2010-12-14 20:36 編輯

回復 1# sandra_wang
  1. Sub Ex()
  2.     Dim Rng As Range, s1, s2, i
  3.     With ActiveSheet
  4.         Set Rng = .Range("i1", .Range("iv1").End(xlToLeft))
  5.         s1 = Rng.Address(, , xlR1C1)
  6.         For i = 2 To .Range("i" & Rows.Count).End(xlUp).Row
  7.             s2 = Rng.Offset(i - 1).Address(, , xlR1C1)
  8.             .Cells(i, "b").FormulaArray = "=SUM((" & s1 & "<>"""")*(" & s2 & "))"
  9.         Next
  10.     End With
  11. End Sub
複製代碼

作者: Hsieh    時間: 2010-12-14 20:48

回復 1# sandra_wang
  1. Sub nn()
  2. For i = 2 To 4
  3.   Set a = Cells(1, 9)
  4.    Cells(i, 2) = Application.Sum(Range(a.Offset(i - 1), a.Offset(i - 1).End(xlToRight)))
  5. Next
  6. End Sub
複製代碼

作者: FAlonso    時間: 2010-12-14 21:12

  1. Sub abc()
  2. Dim mycolumn, i
  3. mycolumn = Mid(Cells(2, 9).End(xlToRight).Address, 2, 1)
  4. For i = 2 To 4
  5. Cells(i, 2) = Application.Sum(Range("I" & i & ":" & mycolumn & i))
  6. Next i
  7. End Sub
複製代碼
首次在這裡提供code,不知寫得如何?
作者: Hsieh    時間: 2010-12-14 22:06

回復 4# FAlonso

這會有一個缺點
欄名英文是2個字時就出錯
作者: FAlonso    時間: 2010-12-14 22:40

  1. Sub abc()
  2. Dim mycolumn As String, mystring As String, myarray, i
  3. myarray = Split(Cells(2, 9).End(xlToRight).Address, "$", -1)
  4. mycolumn = myarray(1)

  5. For i = 2 To 4
  6. Cells(i, 2) = Application.Sum(Range("I" & i & ":" & mycolumn & i))
  7. Next i
  8. End Sub
複製代碼
多謝H大,改良了這一點,利用split方法套取column列
作者: sandra_wang    時間: 2010-12-15 10:31

感謝樓上各位的幫忙,問題已經解決了!
作者: frankjenq    時間: 2010-12-15 18:31

回復 2# GBKEE

請問GBKEE大師
不好意思!小弟不太懂這陣列公式"=SUM((" & s1 & "<>"""")*(" & s2 & "))"的用意,可以明白的解釋一下嗎?
謝謝!
作者: GBKEE    時間: 2010-12-15 19:45

回復 8# frankjenq
節錄 vba的說明   FormulaArray  該公式必須使用 R1C1 參照樣式,而無法使用 A1 參照樣式
所以
s1 = Rng.Address(, , xlR1C1)
s2 = Rng.Offset(i - 1).Address(, , xlR1C1)
傳回R1C1 參照樣式  帶入公式中 "=SUM((" & s1 & "<>"""")*(" & s2 & "))"
作者: frankjenq    時間: 2010-12-16 09:25

回復 9# GBKEE


Sorry!!可能是我表達的不好!

Ex:[I2]={SUM(($I$1:$O$1<>"")*($I$3:$O$3))}
我的疑問是想問為何要用"(($I$1:$O$1<>"")*($I$3:$O$3)"的方式來作運算,剛才試了一下才知道當該row的title內容<>""時為"TRUE"是可以拿來當作數值1使用,
即 TRUE*1=1
    FALSE*1=0
依陣列公式遞回來作加總→這招真是高呀!

受教了
Thanks!!
作者: alltest    時間: 2013-1-14 12:00

好好學一下vba的欄位加總~謝啦^^




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)