[[20130311142239]] 『いろいろ』(あるよね) ページの最後に飛ぶ

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

 

『いろいろ』(あるよね)

教えてください。
”セルに色がついたセルのの中の数値を足す”という作業を数式orマクロで実行したいのですがどうやったらいいか教えて頂きたくお願い申し上げます。
数値計算式が入っていて可変になります。


 対象の領域が不明だけど、シート上の色のついたセルをすべて対象にするなら。
 (シート名は実際のものになおしてね)

 Sub Sample()
    Dim c As Range
    Dim tot As Double

    For Each c In Sheets("Sheet1").UsedRange
        If Not c.Interior.ColorIndex = xlNone Then
            tot = tot + Val(c.Value)
        End If
    Next

    MsgBox "合計は " & tot

 End Sub

 (ぶらっと)

ご連絡ありがとうございます。
ありがたいのですが・・・・すみません 理解できません・・・・

お手すきでしたら解説して頂きたいのですが。

色を指定したいときはどうしたらいいでしょうか?


    For Each c In Sheets("Sheet1").UsedRange

    ★このシートの "UsedRange" という領域(後程補足)からセルを1つずつ c という変数に取り出す。 

        If Not c.Interior.ColorIndex = xlNone Then

        ★もし、そのセルの背景色( c.Interior.ColorIndex)が xlNone(無色) 【ではなかったら】

            tot = tot + Val(c.Value)

            ★ tot という合計用変数にその値を足しこみ。 セルに間違えて文字列などが入っているとエラーになるので
        Val関数を使って、念のため数値に変換。

        End If
    Next

    ★次のセルを取得すべくループ

    MsgBox "合計は " & tot

    ★ループ処理が終わったら結果を表示。

 UsedRange

  シート上の、値のあるセルで、【一番上にあるセルの行】と【一番下にあるセルの行】にはさまれ
  【一番左にあるセルの列】と【一番右にあるセルの列】にはさまれた矩形(四角形)の領域を "UsedRange" と呼ぶ。

 で、色を指定したい場合は c.Interior.ColorIndex の値を判定すればいい。
 カラーインデックス番号については、
http://www.excel-excel.com/tips/vba_63.html
 等を参照。

 カラーインデックスのかわりに 色番号そのもの(c.Interior.Color)を判定してもいい。
 この場合、色番号をVBA既定の定数(vbYellowとかvbRedとか)で指定することも可能。

 (ぶらっと)

ぶらっとさま

ありがとうございました。
なんとか意味を理解いたしました!!

ですが・・・・すみません
使い方が分かりません、たびたびで誠に申し訳ございません。
教えて頂きたく。

  A     B    C    D    E    F    G    H    I    J    K
  50   40   30   10    5    5   10   15    0   15   35
 (黄) (黄) (黄) (黄) (緑) (緑) (緑) (青) (青) (桃) (桃) 
    ※毎月セルの色が変わります 

上記のような表があります、(黄)は数字が入っているセルの色を意味しています。
この表から、別の場所のセルで それぞれの色が塗られているセルの数を合計を出したいです。

(黄) (緑) (青) (桃)
?   ?  ?  ?

こんな事が出来ますでしょうか?


 実際のシート上の位置が不明だけど、A1〜K1 の内容を集計して 結果を M1〜P1 に表示。
 なお、色の判定については、カラーインデックスの 4,5,6,7 を使っている。
 実際にそちらで塗りつぶしている色のカラーインデックスが、これとは異なれば、実際のものに
 なおしてね。

 Sub Sample2()
    Dim c As Range
    Dim tot As Double
    Dim totY As Double
    Dim totB As Double
    Dim totG As Double
    Dim totP As Double

    For Each c In Range("A1:K1")
        Select Case c.Interior.ColorIndex
            Case 4: totG = totG + Val(c.Value)      '緑
            Case 5: totB = totB + Val(c.Value)      '青
            Case 6: totY = totY + Val(c.Value)      '黄
            Case 7: totP = totP + Val(c.Value)      '桃
        End Select
    Next

    Range("M1:P1").Value = Array(totY, totG, totB, totP)

 End Sub

 (ぶらっと)

できましたー!!!!!
ぶらっと 様、分かりやすい説明ありがとうございました。
助かりました。
また、分からないとこがありましたら助けてください。

コメント返信:

[ 一覧(最新更新順) ]


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