[[20200507164913]] 『セルに色があるセルのみ計算したい』(きょうこ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セルに色があるセルのみ計算したい』(きょうこ)

計算式で
=SUM(J3:J103)
とあるのですが、この中でセルに色がついたセルのみ計算する場合
どうしたらいいですか?

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 色の付け方にルールがあるなら、そのルールを使って
 SUMIFで計算されるといいと思います。
(コナミ) 2020/05/07(木) 16:55

コナミさんありがとうございます。
色はこちらで塗っているだけです。
決まりはありますがセルで管理しているわけではありません。
その時によって色はかえています。
よろしくお願いします。
(きょうこ) 2020/05/08(金) 08:48

 ユーザー定義関数を作ることになりそうですが、
 色が付いていたらどんな色でも足すんですか?

 ※後出しで条件が増えることが珍しくないので先にお尋ねしております。

(半平太) 2020/05/08(金) 15:15


半平太さんありがとうございます
色は一色しかなく、特に決まってはないので
色がついているセルを全て足したいです。
(きょうこ) 2020/05/08(金) 16:38

この学校内に記述がありますよ。
http://www.excel.studio-kazu.jp/DL/UFClr/index.html
(通りすがり) 2020/05/08(金) 17:22

 色付きのセルを数える/合計する:Excel VBA入門
 h ttp://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_color.html

(通行人) 2020/05/08(金) 17:39


 1.後記マクロを標準モジュールに貼り付ける。

 2.結果が必要なセルに下式を入力する。

   =ColorSum(A1:B3)

 ’標準モジュールに貼り付けるマクロ

 Function ColorSum(Scope As Range, Optional baseClr) As Double
     Dim r As Range
     Dim aVal As Double
     Dim S(1 To 2) As Double

     Application.Volatile

     If IsMissing(baseClr) Then
         baseClr = 16777215 '無色
     Else
         If TypeName(baseClr) = "Range" Then
             baseClr = baseClr.Interior.Color
         End If
     End If

     For Each r In Scope
         aVal = IIf(Application.IsNumber(r.Value), r.Value, 0)

         If r.Interior.Color = baseClr Then
             S(1) = S(1) + aVal
         Else
             S(2) = S(2) + aVal
         End If
     Next r

     If baseClr = 16777215 Then
         ColorSum = S(2)
     Else
         ColorSum = S(1)
     End If
 End Function

(半平太) 2020/05/08(金) 20:33


私の備忘録より
参考にしてください。

1)数式タブの名前の管理をクリックします。
2)新規作成ボタンを押します。
3)名前は任意で好きな名前を入力してください。ここでは「iro」としています。
4)参照範囲に=get.cell(63,B3)+now()*0と入力します。
5)セルC3に=iroと入力し下へコピーする。
6)色の番号が返りました。
7)なので、いつもの感じでsumif関数。
 E3=SUMIF($C$3:$C$13,iro,$B$3:$B$13)

※保存する時はExcelマクロ有効Book(*.xlsm)で保存します。

     |[B] |[C]   |[D] |[E] 
 [2] |数値|色番号|色  |合計
 [3] |  10|     6|黄色| 100
 [4] |  20|     0|水色| 200
 [5] |  30|     6|    |    
 [6] |  40|     0|    |    
 [7] |  50|     0|    |    
 [8] |  60|     6|    |    
 [9] |  70|     0|    |    
 [10]|  80|     0|    |    
 [11]|  90|    33|    |    
 [12]| 100|     0|    |    
 [13]| 110|    33|    |    

B3.B5.B8は黄色、 B11.B13は水色で塗りつぶし
(KLY) 2020/05/08(金) 22:02


 少し変更しました。

 Function ColorSum(Scope As Range, Optional baseClr) As Double
     Dim r As Range
     Dim aVal As Double
     Dim S(1 To 2) As Double
     Dim WasMissing As Boolean

     Application.Volatile

     If IsMissing(baseClr) Then
         WasMissing = True
         baseClr = 16777215 '無色
     Else
         If TypeName(baseClr) = "Range" Then
             baseClr = baseClr.Interior.Color
         End If
     End If

     For Each r In Scope
         aVal = IIf(Application.IsNumber(r.Value), r.Value, 0)

         If r.Interior.Color = baseClr Then
             S(1) = S(1) + aVal
         Else
             S(2) = S(2) + aVal
         End If
     Next r

     If WasMissing Then
         ColorSum = S(2)
     Else
         ColorSum = S(1)
     End If
 End Function

(半平太) 2020/05/08(金) 22:07


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.