(網友提問)在 Excel 中要計算符合條件的加總可以使用 SUMIF 函數,例如:
(參考下圖)
儲存格F2:=SUMIF($B$2:$B$19,E2,$C$2:$C$19)
儲存格F3:=SUMIF($B$2:$B$19,E3,$C$2:$C$19)
但是當資料是複製而來,當貼上的資料範圍超過原來公式裡的儲存格範圍,如何可以不改公式而正確的計算結果。
【公式設計與解析】
如果儲存格範圍會變動,則需要藉助 OFFSET 函數和 COUNTA 函數來求得動態範圍。
儲存格F2:=SUMIF(OFFSET($B$2,0,0,COUNTA($B$2:$B$199),1),E2,OFFSET
($C$2,0,0,COUNTA($B$2:$B$199),1))
(1) COUNTA($B$2:$B$199)
利用 COUNTA 函數求取一個儲存格範圍內的文字(非空白)數量,其中參數 199,只是一個很大的數字。
(2) OFFSET($B$2,0,0,COUNTA($B$2:$B$199),1)
將第(1)式代入 OFFSET 函數,可以求得含有文字的儲存格範圍。
同理:
儲存格F3:=SUMIF(OFFSET($B$2,0,0,COUNTA($B$2:$B$199),1),E3,OFFSET
($C$2,0,0,COUNTA($B$2:$B$199),1))
【另解】
如果使用 SUMIF($B$2:$B$19,E2,$C$2:$C$19) 時,能將儲存格範圍盡量放大一些,如此貼上新資料時,也不需要改公式。
文章標籤
全站熱搜

老師您好: 拜讀您的教學獲益良多,真的很感謝您 有個VBA問題想請教您, 假設A1=S1,而S1(也是等於某公式)的數字會依照資料接收來源的計算結果隨之變動) 若我想當A1的顯示數字變動時,去觸發某SUB 請問這樣的VBA應該怎麼寫呢?
Private Sub Worksheet_Change(ByVal Target As Range) If (Target.Address(0, 0) = "ˋˋ$BL$9") Then Application.OnTime Now + TimeValue("00:00:01"), "CopyRange04" End If End Sub 目前是過這個做法,但是由於BL9資料是等於某儲存格,等於是=公式 因此,即便數字已變,但公式沒變.所以不會觸發SUB