標題:
[發問]
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
Sub Ex()
Dim Rng As Range, s1, s2, i
With ActiveSheet
Set Rng = .Range("i1", .Range("iv1").End(xlToLeft))
s1 = Rng.Address(, , xlR1C1)
For i = 2 To .Range("i" & Rows.Count).End(xlUp).Row
s2 = Rng.Offset(i - 1).Address(, , xlR1C1)
.Cells(i, "b").FormulaArray = "=SUM((" & s1 & "<>"""")*(" & s2 & "))"
Next
End With
End Sub
複製代碼
作者:
Hsieh
時間:
2010-12-14 20:48
回復
1#
sandra_wang
Sub nn()
For i = 2 To 4
Set a = Cells(1, 9)
Cells(i, 2) = Application.Sum(Range(a.Offset(i - 1), a.Offset(i - 1).End(xlToRight)))
Next
End Sub
複製代碼
作者:
FAlonso
時間:
2010-12-14 21:12
Sub abc()
Dim mycolumn, i
mycolumn = Mid(Cells(2, 9).End(xlToRight).Address, 2, 1)
For i = 2 To 4
Cells(i, 2) = Application.Sum(Range("I" & i & ":" & mycolumn & i))
Next i
End Sub
複製代碼
首次在這裡提供code,不知寫得如何?
作者:
Hsieh
時間:
2010-12-14 22:06
回復
4#
FAlonso
這會有一個缺點
欄名英文是2個字時就出錯
作者:
FAlonso
時間:
2010-12-14 22:40
Sub abc()
Dim mycolumn As String, mystring As String, myarray, i
myarray = Split(Cells(2, 9).End(xlToRight).Address, "$", -1)
mycolumn = myarray(1)
For i = 2 To 4
Cells(i, 2) = Application.Sum(Range("I" & i & ":" & mycolumn & i))
Next i
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/)