お世話になっています。
excel2000で、行ごとに網掛けされている個数を数える関数を作りたいのです。
=COUNTIF(H5:W5,)ここまで考え、この後に「網掛け」を意味する検索条件を入れればいいのかな、と思うのですが、わかりません。
ご教授いただきたく、宜しくお願い致します。

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

A 回答 (3件)

補足を参考に行単位の網掛け条件に合致する個数をカウントするモデルのマクロです。


単に、網掛けの条件を羅列しているだけです。

使い方は、=AmikakeTTL(行数) です。
合計したい行のどこかに =AmikakeTTL(ROW()) とすればコピーもできます。

同一列でのカウントも同じようにできることになります。

ご参考に。

Public Function AmikakeTTL(rw As Long)
  Dim TTL As Integer '網掛け個数

  Application.Volatile '自動再計算関数にする
  With ActiveSheet 'Sheetが決まっていたら固定していい
    '列Hでは10未満(の会社)
    If IsNumeric(.Range("H" & rw)) And .Range("H" & rw) < 10 Then
      TTL = TTL + 1
    End If

    '列Iでは100以上
    If IsNumeric(.Range("I" & rw)) And .Range("I" & rw) >= 100 Then
      TTL = TTL + 1
    End If

    '列Jでは・・・・・

    '列Kでは・・・・・

  End With
  AmikakeTTL = TTL
End Function
    • good
    • 0
この回答へのお礼

nishi6さま
たびたびほんとうにありがとうございます。
私には、ぱっと見ただけでは理解できませんが、マクロを全く未体験というわけではないので、本を参考にしながら、理解し、トライしてみようと思います。
とにかく、お返事を頂き感激致しましたので、まずはお礼まで。

お礼日時:2002/03/29 17:12

>条件付き書式の網掛けはだめなんですか。

今回まさにそれなので

条件付き書式の場合、網掛けをする条件さえわかれば簡単でしょう。
COUNTIF(範囲,条件) か 面倒な条件なら網掛けをする条件をコード化すればいいでしょう。

質問からは条件付き書式とは読みきれないですね。デハ。

この回答への補足

ふたたびのご回答、本当にありがとうございます。m(__)m

>質問からは条件付き書式とは読みきれないですね。
教えて頂くには、どういう情報が必要なのか、なかなか判断が付きかねてしまい・・・。説明不足ですみませんでした。

>条件付き書式の場合、網掛けをする条件さえわかれば簡単でしょう。
>COUNTIF(範囲,条件) か 面倒な条件なら網掛けをする条件をコード化すればいいでしょう。
それが、各列に入っている条件が、ちがうのです。例えば列Lでは50以上、列Mでは10以下、というように。ですので、難しいと思うのですが。

ご厚意に甘えて、もう少し説明させて頂くと、行5は○○商事、行6は○○食品、というように、各行が会社ごとの情報になっています。そして、列Hでは取引年数、列Iでは従業員数、などの項目となっています。そして、列Hでは10未満(の会社)、列Iでは100以上が網掛けされるように設定してあります。そして、タテの合計(取引年数10年未満の会社は何社あるか)は、設定できましたが、ヨコの合計(○○商事は、いくつの項目が当てはまるか)の設定に苦労している次第です。

もし何かお知恵を拝借できるととても助かります。

補足日時:2002/03/27 17:50
    • good
    • 0

通常のワークシート関数では難しいでしょう。

ユーザー定義関数を作ってみました。

ツール→マクロ→Visual Basic Editor でVBE画面に移り、挿入→標準モジュール で標準モジュールを挿入し、そこに下記コードを貼り付けます。
シートに戻り、例えば、範囲A1:B10を調べる場合は、
  =PatternCellsCount(A1:B10) のようにします。
対象範囲の網掛け設定を変更した場合は、再計算を行ってください。また、これは条件付書式の網掛けは感知できません。

↓ここから
Function PatternCellsCount(rgSel As Range)
  Dim rg As Range 'セル
  Dim ct As Long 'カウンタ

  Application.Volatile '自動再計算関数にする
  For Each rg In rgSel
    '網掛け設定されていればカウントする
    If rg.Interior.ColorIndex <> xlNone Then
      ct = ct + 1
    End If
  Next
  PatternCellsCount = ct
End Function
    • good
    • 0
この回答へのお礼

nishi6さま、いつもいつもありがとうございます。
ありゃ、条件付き書式の網掛けはだめなんですか。今回まさにそれなので、じゃあせっかく教えて頂いたけれど、だめですね。
申し訳ありません、でも勉強になりました。

お礼日時:2002/03/27 12:15

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

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

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

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

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

Qエクセルで網掛けをしたセルをカウントしたいのですが。

エクセルで,カレンダーを作成しています。
1 12ヶ月の月曜日(他の曜日も)の中で,勤務日が何日あるかカウントしたいのですが,うまくいきません。そこで,網掛け(または色つけ)したセルの数をカウントしたいのですが,どんな方法がありますか?
2 また,このような目的で,他にいい方法があったら教えてください。

Aベストアンサー

通常の関数では出来ないと思います。
こちら↓を参考にどうぞ。

はじめてのユーザー定義関数 - 色のついたセルを合計
http://hp.vector.co.jp/authors/VA016119/hajimete/udf1.html

(EXCEL)CELLの色をカウントする。
http://oshiete1.goo.ne.jp/qa1225959.html

Q(EXCEL)CELLの色をカウントする。

エクセルの関数で、CELLの色パターンを数えたりできるのでしょうか。例.セルのパターンが赤色のものをカウントするなど。

Aベストアンサー

#1さんの方法が本道だと思いますが、
「なぜ、そのセルを赤にしたのか?」を判定条件にしたらCOUNTIF関数等でもカウントできませんか?

Qエクセルで網掛けのセルだけカウント

エクセルで指定範囲内の網掛けされたセルの数をカウントしたいのですが、どうすればいいのでしょうか?

Aベストアンサー

>条件付き書式で設定された網掛けを認識させることは出来ないんでしょうか?

私にも分からなかったので、アチコチの掲示板で聞いてみました。
その結果ですが、条件付き書式の網掛けを直接判定する方式は分かりませんでした。条件を文字列で取得して、判定するしかないようです。
設定されている条件はどのようなものか(セル範囲か数式か)、また条件は幾つ設定されているのか、それによって対応は全部違います。全部の条件を列挙すると長くなりますので、条件は1つだけで、条件は数式である場合について書きます。

For Each var In Range("A1:B4")
 var.Activate
 If Evaluate(var.FormatConditions(1).Formula1) Then i = i + 1
Next var

セル範囲は"A1:B4"、i にカウントされます。
条件がセル範囲である場合等は、また書き込みします。

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

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

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

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

Aベストアンサー

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

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行目に何らかのデータが必要です)

まず...続きを読む

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【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(エクセル)該当の場合、自動で網掛け設定をしたい

エクセルで進捗管理表を作ります。
処理完了日に、何らかの入力があれば、その行の該当表示箇所に網掛けをしたい。
どのように行うのがよいでしょうか?
ご回答お待ちしています。

Aベストアンサー

処理完了日のセルを「A1」、処理したい行は「1行」として
設定したいセルを選択してから次の作業をすればできるはずです。

ホームタブの条件付き書式を選択
新しい書式ルールを選択
ルールの種類の選択
  数式を使用して、書式設定するセルを決定を選択する
ルールの内容を編集
次の数式を満たす・・・・
式を「=$A1<>""」
書式を選択すれば
塗りつぶし
パターンの種類
「OK」
でできるはずです。

ポイントは
$A1
「$」使うことです。
以上

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色が付いたセルの合計を出したいのですが…

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

エクセル2002を使用していますが、特定の色が付いたセルの個数を数えたいのです。
同時に「色が付いてあるセルを数える」に加えて、「色を付けたら直後、そのセルの個数が数えられる」ようにしたいのです。
「色が付いたセルの引数を数える」というのは分かるのですが、「セルだけの合計」となると分かりません…。

以前にも質問しましたが、結局分からず終いでしたので、改めてお願い致します。

例題)A1~G1を赤で色付けした時に、赤色の付いたセルの個数をA2に出す。
理想とする結果) A2に赤色のセルの合計「7」が出た。

Aベストアンサー

ユーザー定義関数による方法です。

一般の関数のような使い方で、指定した色のセル数をカウント出来ます。
色を変更し、<Enter>等で他のセルに移動した時点で再計算します。

書式: CCount(範囲,色番号(カラーインデックス))
使用例 : CCount(A1:A100,3)   A1:A100範囲の赤色をカウント
(赤=3 ですが、他の色の番号を知るには、後述の GetIndx関数で調べられます。)

これで良かったら、詳しく操作手順を書きますので、新しいブックでテストして
みてください。

VBAコード設定方法
1.Alt + F11 で VBE(Visual Basic Editor)を開きます。
2.VBE のメニューから[挿入] -->[標準モジュール] を指定します。
3.モジュールウィンドウに下記コードをコピーして貼り付けます。
4.Alt + Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。
5.メニューから[ツール]-->[マクロ]-->[セキュリティ]で「セキュリティレベル」を
 「中」にして[OK]します。

Function CCount(Rng As Range, idx)
Dim R As Range
Dim Cnt As Long
Application.Volatile
For Each R In Rng
  If R.Interior.ColorIndex = idx Then Cnt = Cnt + 1
Next R
CCount = Cnt
End Function

Function GetIndx(Rng As Range)
If Rng.Count > 1 Then
  GetIndx = vbNullString
  Exit Function
End If
GetIndx = Rng.Interior.ColorIndex
End Function

'---------------------------------------
◎ 各色のカラーインデックスを調べる関数(付録)
コード後半は、GetIndx関数は、カラーインデックス番号を調べる関数です。
必要なときに使ってみてください。

使い方例: A1をインデックス番号を調べたい色で塗り潰します。
例えば、セルA1を任意の色で塗り潰し、B1に
 =GetIndx(A1) を入力するとそのカラーインデックス番号が表示されます。

----------------------------------------
※ CCount関数を自動再計算に対応させる設定

 色を変更しただけでは、再計算されませんので Enter等でセルを移動した時点
 で、再計算されるようにします。(シートモジュールに記述)

【 操作手順 】
・この関数を使用しているシートのシート名タブを右クリックして「コードの表示」を
 指定します。
・開いたコードウィンドウに下記コードをコピーして貼り付けます。
・Alt+ Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Calculate
End Sub

ユーザー定義関数による方法です。

一般の関数のような使い方で、指定した色のセル数をカウント出来ます。
色を変更し、<Enter>等で他のセルに移動した時点で再計算します。

書式: CCount(範囲,色番号(カラーインデックス))
使用例 : CCount(A1:A100,3)   A1:A100範囲の赤色をカウント
(赤=3 ですが、他の色の番号を知るには、後述の GetIndx関数で調べられます。)

これで良かったら、詳しく操作手順を書きますので、新しいブックでテストして
みてください。

VBAコード設定方法
1.Alt +...続きを読む


人気Q&Aランキング