ウォッチ漫画『酒男子』新連載開始!

(EXCEL)CELLの条件付き書式で色をつけたセルをカウントしたいのですが、適切なVBAはありますか?私はVBAは初心者中の初心者です。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

#3の回答者です。



ダメならダメで結構なのですが、曲がりなりにもある時間を費やして、#3 でVBAの回答した私に対して、なぜ、そのようにコメント避けたのは分かりません。#3 で書いたように、元の質問を元にしては、VBAでは、情報が足りなくて、解決に完全な見通しは立たないということです。

いずれにしても、サンプルとしてレイアウトを示してもらったほうが早いかもしれません。回答者のいろんな想像に対して、あれこれ書いても、おそらく、情報が不足していて、うまく行かないような気がします。

たとえば、#4の補足の中の、B1 の同じセルに、残業時間と休日出勤があるのか、同じものなのか、良く理解できません。

B1が1月の残業時間、
B1が月の休日出勤時間、
C1がその2つの合計時間です。

おそらく、どこかに項目欄(例えば、A列)があるなら、SUMPRODUCT で、

=SUMPRODUCT((A1:A100="項目")*(B1:B100>=42)) 条件:42 (時間)

とすれば、カウントすることが出来るかと思います。
    • good
    • 0

#1です。


そうゆう配置になっているなら、いったん最終行でそれぞれの列のCOUNTIFをとり、その合計を計算した方が簡単でしょうね。
500人いるなら、D501セルに一月分の小計
=COUNTIF(D1:D500,">42")
として、それを3列おきにコピーし12月の小計の後で501行目の合計を求めればOKでしょう。

この回答への補足

ご回答ありがとうございます。それだと例えば1月の休日の労働時間で42時間を越えた場合、休日労働時間とその月の合計労働時間で2回とカウントされてしまうのです。あくまで私がとりたいのはその月の合計労働時間において42時間以上かどうかなんです。でもその内訳である労働時間と休日労働時間の内訳も違う種類のカウントのときに必要なので、できれば消さずに今回の計算ができないか模索中です。
親身にご相談にのっていただき感動です。
もしかしたら無理なのかもしれないと思っています。

補足日時:2008/03/09 10:42
    • good
    • 0

条件付き書式で色をつけた根拠は


(1)セルの値(の大小など)で色をつけたに違いない。
質問ではその条件を書いてくれれば考えやすかったが。
(A)そこでその条件をVBAのIF文やCASE文に置き換えてプログラムを組みカウントする方法もある。
例データ
11
2
21
15
25
8
9
33
コード
Sub test01()
Dim a(5)
For i = 1 To 8
x = Cells(i, "A")
Select Case x
Case Is > 40
a(1) = a(1) + 1
Case Is > 30
a(2) = a(2) + 1
Case Is > 20
a(3) = a(3) + 1
Case Is > 10
a(4) = a(4) + 1
Case Else
a(5) = a(5) + 1
End Select
Next i
For i = 1 To 5
MsgBox "a" & i & "= " & a(i)
Next i
End Sub
配列は0に初期化がよいかも。
8を自動的に採ることはできるが初心者あてなので略。
(B)上記のことは条件付書式の色はとりあえず、置いといて、そのの条件の量的な面に注目して、それに基づいて関数で該当分の件数を数えル方法もあるということだ。
上例でやると
右は関数式の内容
0=SUMPRODUCT((A1:A8>40)*1)
1=SUMPRODUCT((A1:A8<=40)*(A1:A8>30)*1)
2=SUMPRODUCT((A1:A8<=30)*(A1:A8>20)*1)
2=SUMPRODUCT((A1:A8<=20)*(A1:A8>10)*1)
3=SUMPRODUCT((A1:A8<=10)*(A1:A8>0)*1)
2007ならSUMIFSが使えるかも
(2)既にセルなりに設定されている色でカウントするら
やはりIF文やCASE文でプログラムコードを組む方法もある。
条件付書式は3種以下なので上例は不適当だが
Colorindexについて、上記(1)(A)のような(そっくりの)プログラムを組めばよい。
Select Case x
をSelect Case Cells(i,"A").interior。Colorindex  にして。
ーー
しかし>VBAは初心者中の初心者です、なら上記のことも判らないかも知れないと思う。
配列
繰り返し
Case文
件数の取り方(該当したとき+1)
など経験者にはなんでもないことが、わかるかな。

この回答への補足

ご回答ありがとうございます。私は会社の総務をしています。そしてこの計算は労働時間の計算です。1行ごとに従業員が並んでいます。たとえばA1が鈴木さん、A2が佐藤さん、A3が山田さんです。列に月ごとに1月、2月、3月です。月の内訳として1月の残業時間と休日出勤時間、そしてその2つの時間の合計時間で1つの月の列が構成されています。たとえば鈴木さんであればB1が1月の残業時間、B1が月の休日出勤時間、C1がその2つの合計時間です。合計時間が42時間を越えている月が年間何回あるのかをカウントしたいのです。ですから残業時間と休日時間だけで42時間を越えているのはセルはカウントしたくないのです。計算しなければいけない従業員が500人前後、そして1年分となると計算労力が大変で困っています。ひとつよろしくお願いします。

補足日時:2008/03/08 20:31
    • good
    • 0

こんにちは。



#1/2 さんのご指摘の通りですね。理由は、条件付き書式で色のついているセルを数えるのは、セルオブジェクトの中では色を取得できませんから、難しいです。

>数えてほしくないセルである
なら、そういうセルを数えて引けばよいのですが、内容的に漠然としていますから、その種の回答としては、今は不可能です。

条件式を取り出して、個別に検索したほうが、早いし簡単だと思います。VBAでは、無理とは言いませんが、極端に面倒なコードになります。

少なくとも、条件式は分かりませんので、VBAでは、条件付き書式を取り出して、それをセルに戻して判定して、True をカウントするという方法しかないと思います。しかし、これは、数式で設定された場合のみであって、私の知っている範囲では、条件付き書式のFormatConditionの、True or False の判定のプロパティは持っていなかったと思います。

なお、これは、A1 方式のみになっていますので、R1C1方式の場合は、ConvertFormula の中を変えてください。コードとして無理があるのは承知の上です。

Sub TestMacro1()
  Dim c As Range
  Dim v As Variant
  Dim a As String
  Dim i As Long
  Application.ScreenUpdating = False
    For Each c In Range("A1", Range("A65536").End(xlUp))
    For Each v In c.FormatConditions
      c.Select
      a = Application.ConvertFormula(v.Formula1, xlA1, xlA1, xlAbsolute)
      If a Like "=*" Then
      If Not IsError(Application.Evaluate(a)) Then
        i = i + 1
      End If
      Else
        MsgBox "現在のマクロでは、この条件付き書式は取れません!", 48
        Exit Sub
      End If
    Next v
  Next c
  Application.ScreenUpdating = True
  MsgBox i
End Sub
    • good
    • 2

#1です。



COUNTIF関数は100以上のセルもカウントすることが出来ます。
質問者様が出来ないのは他に理由があるはずです。

「カウントしたいセルとカウントしたくないセルが同じ行にあります。条件付き書式はカウントしたい列に設定しています。そのカウントしたい列で100以上のセルの数を数えたい」
ではなく、もう少し具体的に示していただけると良い回答が付くと思いますよ。

例)
A1からB2500までのセルの中にある100を超える数字をカウントしたい。
=COUNTIF(A1:B2500,">100")

この回答への補足

#1様ありがとうございます。

=COUNTIF(A1:A10,">100")
で例えていいますとA1とA5、A9という3つのセルの中で100以上の数値のセルがいくつあるか表示させたいのです。

範囲指定でA1:A10としてしまうと、数えてほしくないセルであるA2,A3・・・の100以上のセルも拾ってしまうので困っています。

よろしくお願いします。

補足日時:2008/03/08 13:27
    • good
    • 0

VBAじゃなきゃだめですか?


条件付書式で色を付けたのなら、COUNIFでその条件を設定すればカウントできると思いますが…。

この回答への補足

ご回答ありがとうございます。カウントしたいセルとカウントしたくないセルが同じ行にあります。条件付き書式はカウントしたい列に設定しています。そのカウントしたい列で100以上のセルの数を数えたいため、countifではできないための質問です。

補足日時:2008/03/08 11:46
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q条件付書式で色づけしたセルの数をカウントしたい

WINDOWS XP EXCELL 2003です。
いつもお世話になります。

それそれのタイトル行に 7~556の行があり、
在庫警告  D列  条件付書式で =E7<BS7 で赤色に塗りつぶしに
在庫数   E列  =F7-G7+BR7
注文    F列  =SUMPRODUCT((H7:BQ7)*(MOD(COLUMN(H7:BQ7),2)=1))
出荷    G列  =SUMPRODUCT((H7:BQ7)*(MOD(COLUMN(H7:BQ7),2)=0))
適正在庫数 BS列 数値を入力

何かいい方法をと思い色々調べましたが私が必要としているものが中々見つかりません。
条件付書式で =E7<BS7 で試行錯誤しました。
例えば 条件付書式で =(E7<BS7=”1”,””) とかで1がでればとCOUNT関数でできないとか 全然駄目ですよね。

御指導を仰ぎたいのは

E列の条件付書式で赤と塗りつぶされたセルの数をカウント

ができたらと思いますが何かいい方法はありませんでしょうか。
可能ならよろしく御願いします。

WINDOWS XP EXCELL 2003です。
いつもお世話になります。

それそれのタイトル行に 7~556の行があり、
在庫警告  D列  条件付書式で =E7<BS7 で赤色に塗りつぶしに
在庫数   E列  =F7-G7+BR7
注文    F列  =SUMPRODUCT((H7:BQ7)*(MOD(COLUMN(H7:BQ7),2)=1))
出荷    G列  =SUMPRODUCT((H7:BQ7)*(MOD(COLUMN(H7:BQ7),2)=0))
適正在庫数 BS列 数値を入力

何かいい方法をと思い色々調べましたが私が必要としているものが中々見つかりません。
条件付書式で =E7<BS7...続きを読む

Aベストアンサー

条件付き書式の「結果を」拾い上げる方法はありません(マクロを使っても不可能です)が,ご質問でやりたい事は結局
>7~556の行があり、
>在庫警告  D列  条件付書式で =E7<BS7 で赤色に塗りつぶし

つまりこの行範囲で,E7<BS7 となっている行の個数を数えたいというお話に他なりません。

計算式:
=SUMPRODUCT((E7:E556<BS7:BS556)*1)


もちろんもっともっとシンプルイズザベストに,たとえばBT行に
BT7:
=IF(E7<BS7,1,0)
のように数式を記入し,
=SUM(BT7:BT556)
のように計算してしまえば十分OKです。

Qエクセル・・色の着いたセルの個数を数える関数はある?

エクセルの表内で塗りつぶしされているセルだけを数える様な関数はありますか?
セルには文字や数値は入力されておらず、塗りつぶしているだけです。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

ユーザー定義関数で作ってみました。Ver4 マクロ関数で十分だと私は思いますが、Ver 4 マクロ関数ではケシカランというような方?は、以下のようなVBAでの解決方法が便利かなって思います。

VB Editor の標準モジュールに貼り付けてください。(挿入-標準モジュール)

なお、一般のブックの標準モジュールのユーザー定義関数に、Public キーワードをつけたところで、グローバル関数になるわけではありませんので、もしその点に不安のある方は、マニュアル等で、確認されたほうがよいかもしれませんね。

なお、以下は、引数のインデックスに0を入れると、配列出力するようにしてあります。

'------------------------------------
Function ColorCellCount(範囲 As Range, Optional インデックス As Integer = 1, Optional パターン As Integer = 0)
  Dim myRng As Range
  Dim myIndex As Integer
  Dim myPattern As Integer
  Dim myColor() As Integer
  Dim Ret() As Double
  Dim c As Range
  Dim i As Long
  Dim j As Long
  Set myRng = 範囲
  myIndex = インデックス
  myPattern = パターン
For Each c In myRng
   On Error Resume Next
   If myPattern = 0 Then
     i = WorksheetFunction.Match(c.Interior.ColorIndex, myColor, 0)
   Else
     i = WorksheetFunction.Match(c.Font.ColorIndex, myColor, 0)
   End If
   If i = 0 Then
     ReDim Preserve myColor(j)
     ReDim Preserve Ret(j)
      If myPattern = 0 Then
       myColor(j) = c.Interior.ColorIndex
      Else
       myColor(j) = c.Font.ColorIndex
      End If
      Ret(j) = 1
     j = j + 1
     On Error GoTo 0
     Else
      Ret(i - 1) = Ret(i - 1) + 1
   End If
  Next
  If myIndex <= 0 Then
   ColorCellCount = Ret()
  ElseIf myIndex > UBound(Ret) + 1 Then
   ColorCellCount = Ret(UBound(Ret()))
   Else
   ColorCellCount = Ret(myIndex - 1)
  End If
  Set myRng = Nothing
End Function

ワークシート上での使い方は、

A列
色付き
色なし
色なし
色付き
色付き

=ColorCellCount(A1:A5, 1 )

とすれば、上から数えて、1番目の色のセルの数が出ます。

=ColorCellCount(A1:A5, 2 )
を入れれば、色なしのセルの数が出ます。

=SUMPRODUCT(ColorCellCount(A1:A5, 0 ))

とすれば、全部の合計が出ます。

なお、
=ColorCellCount(A1:A5,1,1)

とすれば、文字の色を数えます。

こんにちは。

ユーザー定義関数で作ってみました。Ver4 マクロ関数で十分だと私は思いますが、Ver 4 マクロ関数ではケシカランというような方?は、以下のようなVBAでの解決方法が便利かなって思います。

VB Editor の標準モジュールに貼り付けてください。(挿入-標準モジュール)

なお、一般のブックの標準モジュールのユーザー定義関数に、Public キーワードをつけたところで、グローバル関数になるわけではありませんので、もしその点に不安のある方は、マニュアル等で、確認されたほうがよいかもし...続きを読む

Q条件付き書式で色塗りしたセルをカウント マクロ 

数値がランダムに入っている表に条件付き書式で指定の数式に合致するとセルを色塗りするよう設定しあります。その色塗りしたセルをカウントするにはどうすればよいか検索していましたら、下記にマクロでの手法が説明されていましたが、マクロに詳しくないので、どう利用したらよいかわかりません。

http://keep-on.com/excelyou/1999lng4/199908/99080044.txt

たとえば、A1:Y30の範囲の表があるとして、1行ごとに色塗りしたセルをカウントしたいです。Z1,Z2,Z3,Z4...にそれぞれ結果が表示されるようにするには、上記のマクロ(もしくは違う方法)をどのように使用したらよいんでしょうか?

ちなみに1列おきにカウントしたくない列が入っているので、COUNTIF関数を使わないでやりたいんです。色のついたセルを定義してやる方法もありましたが、条件付き書式では不可能とわかりましたので、上記の方法しかないのかなと思うんですが。詳しい方、教えてください。

Aベストアンサー

>ちなみに1列おきにカウントしたくない列が入っているので、..
>また、一行おきにカウントしたくない列が含まれているというのは..
>「一行おきに」色つきセルをカウントというのは..

..ぅーん.. -"-
「1行おき」かつ「1列おき」にカウント対象外セルがある、という意味ですかね?
つまり
B2,D2,F2,H2,J2,L2,N2,P2,R2,T2,V2,X2
B4,D4,F4,H4,J4,L4,N4,P4,R4,T4,V4,X4
...?
Z1はさっきの数式で
Z2=SUMPRODUCT((A2:Y2>=$AA$1-5)*(A2:Y2<=$AA$1+5)*MOD(COLUMN(A2:Y2),2)+(A2:Y2>=$AA$1+25)*(A2:Y2<=$AA$1+35)*MOD(COLUMN(A2:Y2),2))
Z1:Z2をZ30までコピー。

1行おきではなく全行で偶数列がカウント対象外ならZ2の式をZ1:Z30コピーで。



マクロにしたところで
Sub try()
  Dim i As Long
  Dim j As Long
  Dim c As Long
  Dim x

  With Sheets("SheetX")
    x = .Range("AA1").Value
    For i = 1 To 30
      c = 0
      For j = 1 To 25 'Step 2
        If (i Mod 2) Or (j Mod 2) Then
          With .Cells(i, j)
            If (((x - 5) <= .Value) And (.Value <= (x + 5))) Or _
              (((x + 25) <= .Value) And (.Value <= (x + 35))) Then
              c = c + 1
            End If
          End With
        End If
      Next
      .Cells(i, 26).Value = c
    Next
  End With
End Sub
>標準モジュールに張り付けて実行すればOK..
というわけにはいかないですけどね。要件を整理しなきゃ。

>ちなみに1列おきにカウントしたくない列が入っているので、..
>また、一行おきにカウントしたくない列が含まれているというのは..
>「一行おきに」色つきセルをカウントというのは..

..ぅーん.. -"-
「1行おき」かつ「1列おき」にカウント対象外セルがある、という意味ですかね?
つまり
B2,D2,F2,H2,J2,L2,N2,P2,R2,T2,V2,X2
B4,D4,F4,H4,J4,L4,N4,P4,R4,T4,V4,X4
...?
Z1はさっきの数式で
Z2=SUMPRODUCT((A2:Y2>=$AA$1-5)*(A2:Y2<=$AA$1+5)*MOD(COLUMN(A2:Y2),2)+(A2:Y2>=$AA$1+25)*(A2:Y2<=$AA$1+35)*MOD(...続きを読む

Q背景色のカウント方法

いつもお世話になります。
Win7 Excell2010 です。

背景色のついたセルを関数でカウントしたく色々と調べました。
マクロでは知識不足の私なのでなんとか関数でと思ったのですができないようです。
何かいい方法で関数ではやはり無理でしよう

カウントするには関数か若しくはVBAでご指導仰ぎたいです。
私としては申し訳ないですが知識がなく是非ご協力いただけないでしょうか。

お願いは、例えば
B7 ~ B17 で “青色” B125=1
C7 ~ C17 で “青色” C125=2
D7 ~ D17 で “赤色” D125=1
 のようにカウントができればいいです。

よろしくお願いします。

Aベストアンサー

こんばんは!

7~17行目の色付けは手作業でしょうか?それとも条件付き書式によって色付けされているのでしょうか?
Excel2010以降であれば、
条件付き書式で色付けされているセルが判断できる「DisplayFormatオブジェクト」が使えます。

一例です。
A列の124行目以降のセルを検索したい色にあらかじめ塗りつぶしておいてください。

Sheetモジュールです。
尚、1行目は何らかのデータが入っているという前提です。
(A列の最終行を取得するために、ダミーでもよいので1行目に何らかのデータが必要です)

まず、手作業で色を付けている場合のコードです

Sub 条件付き書式なし()
Dim i As Long, j As Long, k As Long, endRow As Long, endCol As Long
endRow = ActiveSheet.UsedRange.Rows.Count
endCol = Cells(5, Columns.Count).End(xlToLeft).Column
If endRow > 123 Then
Range(Cells(124, "B"), Cells(endRow, endCol)).ClearContents
End If
For j = 2 To endCol
For i = 124 To endRow
For k = 7 To 17
If Cells(k, j).Interior.Color = Cells(i, "A").Interior.Color Then
Cells(i, j) = Cells(i, j) + 1
End If
Next k
Next i
Next j
Range(Cells(124, "B"), Cells(endRow, endCol)).SpecialCells(xlCellTypeBlanks) = 0
End Sub

次に条件付き書式によってセルが色付けされている場合のコードです。
(内容はほとんど一緒です)

Sub 条件付き書式で色付け()
Dim i As Long, j As Long, k As Long, endRow As Long, endCol As Long
endRow = ActiveSheet.UsedRange.Rows.Count
endCol = Cells(5, Columns.Count).End(xlToLeft).Column
If endRow > 123 Then
Range(Cells(124, "B"), Cells(endRow, endCol)).ClearContents
End If
For j = 2 To endCol
For i = 124 To endRow
For k = 7 To 17
If Cells(k, j).DisplayFormat.Interior.Color = Cells(i, "A").Interior.Color Then
Cells(i, j) = Cells(i, j) + 1
End If
Next k
Next i
Next j
Range(Cells(124, "B"), Cells(endRow, endCol)).SpecialCells(xlCellTypeBlanks) = 0
End Sub

※ 空白セルには「0」を表示するようにしていますが、「0」が目障りであれば
最後の
>Range(Cells(124, "B"), Cells(endRow, endCol)).SpecialCells(xlCellTypeBlanks) = 0
の1行を削除してください。m(_ _)m

こんばんは!

7~17行目の色付けは手作業でしょうか?それとも条件付き書式によって色付けされているのでしょうか?
Excel2010以降であれば、
条件付き書式で色付けされているセルが判断できる「DisplayFormatオブジェクト」が使えます。

一例です。
A列の124行目以降のセルを検索したい色にあらかじめ塗りつぶしておいてください。

Sheetモジュールです。
尚、1行目は何らかのデータが入っているという前提です。
(A列の最終行を取得するために、ダミーでもよいので1行目に何らかのデータが必要です)

まず...続きを読む

QEXCEL 条件書式で反応したものだけCOUNTしたい

条件書式で、例えば赤字表示したものだけ、COUNTさせたい。
よろしくおねがいします。

例:データーの管理範囲外(条件書式の赤字)の数を調べる

Aベストアンサー

たぶん関数でやりたいということかもしれないが
関数はセルの「値」を判別したり、計算したりしかできない。
色はセルのフォントの「書式」に属する情報です。
色の判別をする関数が無い。
これをユーザー関数で作れば事は簡単だが。
Function cl(a)
clx = a.Font.ColorIndex
If clx = -4105 Then
cl = ""
Else
cl = clx
End If
End Function
上記はCOUNTIF関数では作業セル範囲を使わないと、使えない。
>条件書式の赤字
こういう風に「条件書式の」でつけた赤字と限定すると不可能に(近く)になるのです。質問者の場合の実態は、条件付き書式だけで色をつけているのでしょうが。
セルの文字のフォントの色というプロパティになると、赤は赤というプロパティになり、来歴は区別しにくくなるのです。
ーーー
残る手段は、VBAです。詳細は略。
ーーー
もうひとつは
条件付書式に設定した条件に戻って、注目し、COUNTIFなどに組み入れられないか考えることです。

たぶん関数でやりたいということかもしれないが
関数はセルの「値」を判別したり、計算したりしかできない。
色はセルのフォントの「書式」に属する情報です。
色の判別をする関数が無い。
これをユーザー関数で作れば事は簡単だが。
Function cl(a)
clx = a.Font.ColorIndex
If clx = -4105 Then
cl = ""
Else
cl = clx
End If
End Function
上記はCOUNTIF関数では作業セル範囲を使わないと、使えない。
>条件書式の赤字
こういう風に「条件書式の」でつけた赤字と限定すると不可能に(近く)に...続きを読む

Q【Excel】 色の一致するセル数をカウントしたい。

こんにちは。

ある条件にあてはまるセルに、書式でセルの色を設定してあります。
いくつかの条件で色分けしてあるのですが、これらのセルの色が「赤」は幾つ、「青」は幾つというふうに、
カウントすることは出来るのでしょうか。

よろしくお願いいたします。

Aベストアンサー

繰り返し何度も出てくる質問です。関数でと考えているなら、直接はできません。
VBAで中身たった1行のユーザー関数を作ればできます。
http://hp.vector.co.jp/authors/VA016119/hajimete/udf1.html
など
Googleで「エクセル セル 色 カウント」などで照会すると似た質問が出る。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1225959
にはCELL関数のことも載っているが、旧いバージョンの関数なので
私は、除外して言ってます。

QエクセルVBAで条件付書式の色を取得

セルに条件付書式で書式設定してあります。

A1は「値」100以下
A2は「値」500以下
A3は「値」1~10の間
B1は「数式」で=B1<A1
以下さまざまな数式があります。

条件に一致すると、セルの文字が「赤」になります。

このとき、
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox Target.Font.ColorIndex
End Sub
を実行しても、ColorIndexは、赤の「3」ではなく「-4105」と表示されます。
「-4105」は何もフォントの色を指定してないセルでも同じく表示されます。

質問1.条件付書式で、条件が一致して表示されたフォントの色は取得できないのでしょうか?

質問2.-4105とは何でしょうか?

Aベストアンサー

merlionXXさん、いつも、スレッドでおさがわせしてすみません。

今回は、別なところで、KenKen_SPさんのコードに感化されまして、私としては、良い勉強させていただいております。

さて、
>No4で教えていただいたコートが「数式が」しか対応しないなら、条件付書式の方を「セルの値が」を「数式が」に変えてやればいいわけですよね?

#9 のコードは、「数式が」でも、「セルの値が」でも、両方使えるはずだと思って作っております。

If .FormatConditions(i).Type = 2

というところで、振り分けをしています。

>「値」の定義?(等しい、間、以上、以下等)ってすべて数式で表せますよね?

一応、すべて当たってみたつもりですが、なにぶんにも夕飯前でしたので、万が一にも、おかしいようでしたら、
FormatCndOperand 関数の myOperand の中の配列の中にある文字列の等号式がおかしいことになります。

QEXCELで、色つきセルだけカウントしたい

エクセルで「条件付書式」を使って、セルに色がつけてあります。
その色が付いたものだけを、カウントして、件数を表示させたいのです。色つきセルが、3個なら、別のセルに、3というぐあいに…可能でしょうか?

Aベストアンサー

#02です
それでは折衷案で、シートの条件付き書式が設定してあるセルの値が「ある値」と同じ場合にカウントするのではどうですか?

シートを一旦保存した後で、以下のマクロを「シート名右クリック」→「コードの表示」で開く画面に貼り付けてください。その後すぐに3行目、4行目のセルアドレスを実際のシートに合わせて変更してください。(サンプルではA4,A5としています)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, clCount As Long
Const trgADRS As String = "A4" '「ある値」のセルアドレス
Const setADRS As String = "A5" '結果を格納するセルアドレス
 For Each c In ActiveSheet.Cells.SpecialCells(xlCellTypeAllFormatConditions)
  If c.Value = Range(trgADRS).Value Then
   clCount = clCount + 1
  End If
 Next
 Range(setADRS) = clCount
End Sub

シートに戻ってどこかのセルの値が変わったタイミングで結果が表示されます。

#02です
それでは折衷案で、シートの条件付き書式が設定してあるセルの値が「ある値」と同じ場合にカウントするのではどうですか?

シートを一旦保存した後で、以下のマクロを「シート名右クリック」→「コードの表示」で開く画面に貼り付けてください。その後すぐに3行目、4行目のセルアドレスを実際のシートに合わせて変更してください。(サンプルではA4,A5としています)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, clCount As Long
Const trgADRS As String = "A4" ...続きを読む

QexcelのCOUNTIF関数で、『範囲=色のついたセル』に設定したいです。

excelのCOUNTIF関数で、『範囲』の設定で、『ある一定の範囲内の色のついたセル』を
範囲として選択したい場合、どのように操作したらよいでしょうか?

たとえば、A1~A30までのセルの中で、A9、A10、A18、A19、A20、A29、A30のセルが赤で、
そのうちのA10、A18、A29、A30に「○」の記号が入っていて、その○の数を調べたい場合です。

ご存知の方、よろしくお願いいたします。

Aベストアンサー

ワークシート関数ではセルの「色番号」は取得できません。
マクロ(ユーザ定義関数)が必要です。

ユーザ定義関数で「背景色が赤で、文字列が○のセル」を数えることも可能ですが、質問は「例えば」で書かれていそうなので、あまりきっちりとマクロを書くと修正が必要になりそうです。
そこで汎用的に使えそうな「手抜きバージョン」で回答します。

まず以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。

Function Cidx(ByVal trg As Range) As Integer
 With trg.Cells(1, 1).Interior
   If .ColorIndex = xlNone Then
     Cidx = 0
   Else
     Cidx = .ColorIndex
   End If
 End With
End Function

次にVBE画面を閉じてワークシート画面に戻り、
 =Cidx(A1)
の式を1行目の空いている列(例えばB列)に入力し、30行分下にコピーします。するとA列のセルの「色番号」が表示されます(背景色なしは0)
ただしセルに値を入力した後で背景色を変更した場合は、ユーザ定義関数の結果は自動的に変わりません。Alt+Ctrl+F9で強制再計算させる必要がありますのでご注意ください

後は別の関数で赤色(色番号=3)で「○」印があるセルをカウントします
 =SUMPRODUCT((A1:A30="○")*(B1:B30=3)*1)

ワークシート関数ではセルの「色番号」は取得できません。
マクロ(ユーザ定義関数)が必要です。

ユーザ定義関数で「背景色が赤で、文字列が○のセル」を数えることも可能ですが、質問は「例えば」で書かれていそうなので、あまりきっちりとマクロを書くと修正が必要になりそうです。
そこで汎用的に使えそうな「手抜きバージョン」で回答します。

まず以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい...続きを読む

Qエクセル 塗りつぶししたセルの個数をカウントしたい

表の集計で、【セルの色を塗りつぶして区別したデータの個数】を、カウントする方法を教えて下さい。

事例ですが、飲食店の月間の宴会データ作成で、売上・客数・組数など集計表に数値で表示されているものは、SUM、COUNT関数で求めています。

質問は、【送迎付きの宴会】データがあり、集計表に数値ではなく【セルの塗りつぶし】で記録されています。目視で数えるのがめんどくさいため、この塗りつぶしの個数をカウントする良い方法がありましたら教えて下さい。

Aベストアンサー

マクロを使わない限り関数で色を指定してセルの数を数えることはできません。次のようにしてはどうでしょう。
Ctrlキーを押しながらFキーを押します。
「検索」のタブで「検索する文字列」は空白のままで「書式」をクリックします。
「パターン」タブでセルの色を選択しOKします。
元の画面で「すべて検索」をクリックすれば下方にどのセルがその色になっているかが表示されると同時に一番下の枠部分には例えば「3セルが見つかりました」のように表示されます。それが答えとなりますね。
このような操作をマクロの記録で取ることでマクロの操作からセルの数を数えることもできるようになるでしょう。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング