Board logo

標題: 有顏色儲存格數字加總 [打印本頁]

作者: zamamilo    時間: 2022-11-2 00:01     標題: 有顏色儲存格數字加總

各位大大你們好
   請問是否能在C4儲存格中寫一函式後算出A列中所有黃色底色的數字加總

[attach]35441[/attach]
作者: samwang    時間: 2022-11-3 08:01

回復 1# zamamilo

請測試看看,謝謝
Sub test()
Dim xR As Range, MyClr
For Each xR In Range([a1], Cells(Rows.Count, 1).End(3))
    MyClr = xR.DisplayFormat.Interior.ColorIndex
    If MyClr <> -4142 Then
        Cells(4, 3) = Cells(4, 3) + xR
    End If
Next
End Sub
作者: hcm19522    時間: 2022-11-3 09:39

https://blog.xuite.net/hcm19522/twblog/205029860
作者: zamamilo    時間: 2022-11-3 15:41

謝謝三旺大大,但我希望用的是函式,還是謝謝你
謝謝 hcm19522大大,這一篇我看過不是我要的,但也謝謝你
作者: Andy2483    時間: 2022-11-4 12:46

回復 2# samwang


    謝謝前輩
有學到DisplayFormat.Interior.ColorIndex 才能辨識格式化條件的黃底
作者: Andy2483    時間: 2022-11-4 12:55

回復 1# zamamilo


    謝謝前輩發表此主題
以下範例 請試試看
[attach]35461[/attach]

A欄沒有黃底格時:
[attach]35462[/attach]

A1儲存格變黃底時:
[attach]35463[/attach]

如題目加總113 時
[attach]35464[/attach]

非數字儲存格變黃底時:
[attach]35465[/attach]
[attach]35466[/attach]
作者: 准提部林    時間: 2022-11-5 08:32

顏色統計須加工再處理, VBA自訂函數//

[attach]35474[/attach]

[attach]35473[/attach]
作者: Andy2483    時間: 2022-11-7 10:24

本帖最後由 Andy2483 於 2022-11-7 10:34 編輯

回復 7# 准提部林


    謝謝前輩指導
後學初步認識Function 自訂義函數,原來它可以用在VBA程式碼裡,也可以當儲存格公式的函數
以下學習心得註解請前輩再指導!

Function GetRangeColor(xA As Range, xArea As Range, xType%)
'↑Function()函數 程式是一系列的 Visual Basic 語句,由 Function 和 End 函數 語句所括住。
'函數 程式與 副程式 類似,但函數也可以傳回值。


'(xA As Range, xArea As Range, xType%)=(顏色格,資料區域,計算模式)
'以下以[E3]為例: =GetRangeColor($D3,$A$1:$A$25,E$1)
'顏色格(xA):$D3  >>指定[D3]儲存格!是因為設計者在後方程序會判讀此格底色 (黃色)
'注意的是:不是因為[D3]儲存格裡有 "黃" 這個字! 是程式判讀此格底色是黃色

'資料區域(xArea):$A$1:$A$25  >>指定這個區域儲存格!是因為設計者在後方程式裡
',判讀哪幾格的底色跟[D3]的底色一樣作為條件

'計算模式(xType):E$1   >>指定設計者統計的哪一個值!設計者在後方程式裡統計了
'合計    個數    平均值  最大值  最小值 >>使用者可以由 1~5 指定
'也可以直接輸入1 =GetRangeColor($D3,$A$1:$A$25,1)
'為什麼不直接輸入 1? 因為如果其它儲存格也用[E1]當變數!把[E1]改2 就會一起變!不必一一改
'結論:判讀 $A$1:$A$25 儲存格裡,如果底色是黃色,就在 [E3]儲存格 顯示 合計 值

Dim xR As Range, X, S(5), C&
'↑宣告變數,S(5)是批次宣告從S(0)~S(5) 共六個
Application.Volatile
'↑將使用者定義的函數標示為易變。
'每當工作表上任何儲存格發生計算時,都必須重新計算易變函數。

X = xA.Interior.ColorIndex
'↑以[E3]為例:此處已經給 GetRangeColor函數第一個值 6(黃色)
For Each xR In xArea
'↑設順迴圈! 令xR是 資料區域(xArea)裡的一員
    If xR.Interior.ColorIndex = X Then
    '↑以[E3]為例:如果[A1]是X(黃色) ?? [A1]是黃底!儲存格值是 51
       S(0) = Val(xR.Value)
       '↑以[E3]為例:就讓第一個S變數是 [A1]的運算值 51
       S(1) = S(1) + S(0) '合計
       '↑以[E3]為例:讓第二個S變數累加 第一個S變數0+51=51
       S(2) = S(2) + 1 '個數
       '↑以[E3]為例:讓第三個S變數累加 0+1 = 1
       If S(2) > 0 Then S(3) = S(1) / S(2) '平均值
       '↑如果第三個S變數大於 0 ??就讓第四個S變數= 第一個S變數/第二個S變數
       '↑以[E3]為例:(51/1)=51
       '因為如果除式的分母是 0 除式的商值是無限大!這要多一個If 判斷式避掉!
       If S(0) > S(4) Then S(4) = S(0) '最大值
       '↑如果第一個S變數大於 第五個S變數! 就第五個S變數就換裝第一個S變數
       If S(5) = Empty Or S(0) < S(5) Then S(5) = S(0) '最小值
      '↑如果第六個S變數是初始值或 第一個S變數小於 第六個S變數!
       '就第六個S變數就換裝第一個S變數

    End If
Next
GetRangeColor = S(xType)
'↑使用 GetRangeColor 這個自訂義函數!
'條件完整!就讓儲存格或副程式計算值!否則就該偵錯囉!
'如果觸發功能是失效模式 Application.EnableEvents = False,
'GetRangeColor函數也會失效!有失真的疑慮!所以用於儲存格公式裡時!要注意!

End Function
Sub TTT()
Dim C As Range, AR As Range, T%
Set C = [SHEET1!D3]: Set AR = [SHEET1!A1:A25]: T = 1
MsgBox "[E3]儲存格統計[A1:A25]黃底格合計值" & GetRangeColor(C, AR, T)
End Sub

[attach]35475[/attach]
作者: zamamilo    時間: 2022-12-13 14:44

回復 7# 准提部林


    謝謝准提部林大大

  解決了我的問題了
作者: Emily    時間: 2022-12-22 15:13

回復 1# zamamilo
[attach]35643[/attach]

如果不容許 VBA 或 自訂函數如 Get.Cell
你可以附加一列背景顏色資料 (不美觀可隱藏該列), 再用 Sumif 處理

ps 113 是你人手輸入?




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