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

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

A 回答 (5件)

#1さんの方法が本道だと思いますが、


「なぜ、そのセルを赤にしたのか?」を判定条件にしたらCOUNTIF関数等でもカウントできませんか?
    • good
    • 9
この回答へのお礼

おお!!確かに。灯台下暗し?でした。早速やってみます!

お礼日時:2005/02/19 14:45

すみません、自分で補足するのも変なんですが、#3、


#4の回答文は、ブラウザの環境によって文字の桁が
ずれてしまうようです。
 (注釈の矢印が意図しないところを指している)

 もし可能なら文章をテキストエディタにコピーして
等幅フォントで表示していただけると、もっと分かり
易くなると思います。
    • good
    • 1

  ★隠れ関数?「ゲットセル」の続きです。



 色つきセル(指定した書式のセル)だけを計算する方法の別解。
 (計算式に名前を付けて「 ="付けた式の名前"」で計算する)

1 色を判定する式を登録する

 (1) 「挿入」→「名前」→「定義」と進み「名前の定義」画面の
   「参照範囲」欄に…、
   「=GET.CELL(判定の種類を指定する番号,判定したいセル番地)
   を記述します。

     ※判定の種類を指定する番号の一例
                     太字か否か?:20
                     フォントの色:24
                     塗りつぶし色:63

   例   A     B
    1 赤い○ (この列で判定)←ここに判定式を書きたい場合
    2 青い○         参照範囲欄の式は
    3 黄色○         「=GET.CELL(24,A1)」
                        ↑
         ※「24」なのは、フォントの色を判定したいから
          第2引数のセル番地は後で相対参照してくれる

 (2) 「名前」欄に計算式の名前(任意だが判り易く)を入力して
   「追加」→「OK」で「名前の定義」画面を閉じます。
    例えば式「=GET.CELL(24,A1)」の名前を "フォントの色" に

2 判定結果を表示したいセルに、「 =任意に定義した式の名前」を
 記述します。

   例   A     B
    1 赤い○ フォントの色 ←判定結果は「3」と表示
    2 青い○ フォントの色 ←判定結果は「5」と表示
    3 黒い○ フォントの色 ←判定結果は「0」と表示

3 判定結果のセルを、SUMIF や COUNTIF関数等で活用、計算する。

   例   A     B
    1 赤い○ フォントの色 ←表示は「3」
    2 青い○ フォントの色 ←表示は「5」
    3 黒い○ フォントの色 ←表示は「0」
    4   (標準カラーパレットのインデックス番号を参照)
    5 =COUNTIF(B1:B3,3,A1:A3) ←A1~A3の範囲で赤い
    6              フォントのデータのある
    7              セルだけカウント
    8 =SUMIF(B1:B3,5,A1:A3) ←データが数値である場合
                   青いフォントのセルだけ
                   合計


 …以上です。自分でも何を言っているのか判らなくなるほど文章で
説明するのは難しいんですが、実際の操作は意外と簡単なのです。
 まぁ、トライ・アンド・エラーということで…。(^^;

※蛇足的な注意
  後から書式変更しても結果が自動更新されないので、NOW 関数を
 組み込んで、適宜「F9」キーで更新させると良いでしょう。
  例:「=GET.CELL(**,**)+NOW()*0」
              ↑(0を掛ければ結果に影響しない)
    • good
    • 1

 #1さんの回答にあるユーザー定義関数で第2引数に指定している


色番号とは、恐らく下記のことだと思います。

  ☆ブックの標準カラーパレットのインデックス番号
   (VBエディタのヘルプにて「ColorIndex」を検索して参照)

  1    2 白   3 赤   4 黄(薄)緑 5 青
  6 黄   7 桃色  8 水色  9 茶色   10 緑
  11 紺    (濃い緑)

以下 ~ 56 までありました。


>といっても、VBAはさっぱりなんですが・・・。

 オイラもよく分かりませんが、VBA を使ったユーザー定義関数なら
他にもいろいろ工夫された方がいるようです。以前オイラが教わった
マクロの例を紹介しておきましょう。


例その1

(1)[ツール]-[マクロ]-[VisualBasicEditor](又は Altキー+F11)
 で、VBE 画面にします。

(2)VBE画面上で[挿入]-[標準モジュール]を選択します。
 するとコードウィンドウが出ますので、以下のコードを記します。
(コピー&ペーストでも可)

 ---------------------------- 以下 ------------------------
 Function SpecialCell(targetRange As Range) As Integer
 Dim myCell As Range

 For Each myCell In targetRange
If myCell.Font.Color = vbRed _
Or myCell.Interior.Color = vbYellow Then
SpecialCell = SpecialCell + 1
End If
 Next
 End Function
 ------------------------- 以上終わり ---------------------

(3)元のワークシートに戻って、適当なセルに
 =SpecialCell(A1:E5)
などと、通常の関数の要領で、調べたい範囲を引数(例ではA1:E5)で
指定して、Enterキーを押せば答えが出るでしょう。


例その2

 次のユーザー定義関数で各色に対応できるハズです。

 ---------------------------- 以下 ------------------------
Function SpecialCell(targetRange As Range, _
intColor As Integer) As Integer
'赤は3,緑は4,青は5,黄は6
Dim myCell As Range

For Each myCell In targetRange
If myCell.Font.ColorIndex = intColor _
Or myCell.Interior.ColorIndex = intColor Then
SpecialCell = SpecialCell + 1
End If
Next
End Function
 ------------------------- 以上終わり ---------------------

赤をカウントする式は =SpecialCell(A1:E5,3)
青をカウントする式は =SpecialCell(A1:E5,5)
黄をカウントする式は =SpecialCell(A1:E5,6)

 ただし、フォント色が黄でセル色が青などというのは、どちらにも
カウントされてしまいます。


例その3

 ---------------------------- 以下 ------------------------
Function ColoredCell(rngArg As Range, rngSample As Range) As Long
For Each c In rngArg
If c.Interior.ColorIndex = rngSample.Interior.ColorIndex Then
ColoredCell = ColoredCell + 1
End If
Next
End Function
 ------------------------- 以上終わり ---------------------

 使う際には、=ColoredCell(A1:A10,A5) のように、第1引数は調べ
たい範囲を、第2引数には指定する色の(サンプル)セルを当てます。


 オイラが先人に教わった方法は以上ですが、見よう見まねのオイラ
でも、コードの貼り付けで何とか結果を確認することができました。

 ただし、これらマクロを使って作成したブックは、エクセルの環境
設定(メニュー「ツール」→「マクロ」→「セキュリティ」)により
「セキュリティレベル」を「高」にしていると、ブックをうまく開け
なかったり、「中」にしている場合はユーザー側の判断を求める警告
メッセージが出たりします。

 念のために元に戻す方法を書いておくことにします。

 ★マクロを解除する方法

1 ツール → マクロ → Visual Basic Editor を開きます

2 画面左上のプロジェクトの欄に VBAProject があり、その配下に
 モジュールがあります。
  そのモジュール配下に作成したときのマクロの名前あるはず。

3 そのモジュール配下にあるマクロの名前ところで右クリック。

4 メニューがでて、「モジュールの名前」+の削除があります。
 もしくは「モジュールの開放」が出たら、それをクリックしてみま
 しょう。

5 エクスポートしますか?と訊いてきたら「いいえ」をクリック。

6 Excelに戻り、上書き保存して終了。
  再度Excelファイルを呼び出すと、警告・確認メッセージは
 もう出てこなくなるはずです。


 このセキュリティに関する制約がうっとうしい場合はマクロを使わ
ない方法も、あることはあります。
 しかし、文章のみで説明するのはかなり難しい上に、何より字数が
尽きたようです。

 ★隠れ関数?
  「=GET.CELL(検査の種類を指定する番号,検査したいセル番地)」
    • good
    • 1

ユーザー定義関数を使えばできます。



VBAで標準モジュールにこのようなプログラムを書いておきます。
あとは、ワークシート上で =COUNTCOLOR(範囲, 色番号) の形で式を入れれば、範囲内である色番号で塗られたセルの数を表示します。
※色番号と色の対応は、パレットの設定を変えると変化します。

Function COUNTCOLOR(ByRef 範囲 As Range, ByVal 色 As Integer) As Long
Dim 個数 As Long
Dim セル As Range
Application.Volatile
個数 = 0
For Each セル In 範囲
If セル.Interior.ColorIndex = 色 Then
個数 = 個数 + 1
End If
Next
COUNTCOLOR = 個数
End Function
    • good
    • 3
この回答へのお礼

なるほどVBAを使うんですね。といっても、VBAはさっぱりなんですが・・・。とにかくトライしてみます。ありがとうございました。

お礼日時:2005/02/19 14:43

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

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

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

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

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

Qエクセル プルダウンの作り方

お世話になります。
エクセルでプルダウンの作り方を教えていただけませんでしょうか?
住所を▼のボタンでクリックしたら【北海道,青森,秋田,岩手・・・】などの選択ができるようにしたいのです。
宜しくお願いします。

Aベストアンサー

メニューから「データ」、「入力規則」、「設定」で「入力値の種類」を「リスト」を選択します。
そうすると「元の値」という表示がでますので、そこで前もって作っておいたリストの範囲を指定します。
多くないのでしたら、そのままそこにカンマで区切って入力しても出来ます。

QEXCEL(IF関数)でCELLの色を変える。

例えば、IF関数で真ならセルの色を赤色にしたり、文字の色を変えたりする関数とかはあるのでしょうか?わかりません・・・知ってる方いらっしゃれば教えて下さい。

Aベストアンサー

こんばんは。

関数ではありませんが‥

<条件付き書式>ではダメなのでしょうか?

メニュー<書式>-<条件付き書式> です。

どのような条件を想定していらっしゃるのかわかりませんが、
<条件付き書式>については↓の参考URLをご覧ください。

▽条件付き書式・その1
http://homepage1.nifty.com/kenzo30/ex_kisosyo/ex_ks_syokyu4.htm

▽条件付き書式・その2
http://homepage1.nifty.com/kenzo30/ex_kisosyo/ex_ks_syokyu5.htm

参考URL:http://homepage1.nifty.com/kenzo30/ex_kisosyo/ex_ks_syokyu4.htm

Qエクセルでプルダウンメニューの作り方

  エクセルの画面で、よく三角形を逆さまにした形をクリックするといくつかメニューが出てき、どれかを選べるようになっていますが、その作り方を教えてください。
 会社で人事を担当していますが、三角形(プルダウンボタン)をクリックすると社員氏名一覧が表示され、そこから選択できるようにしたいのです。
 しばらく自力でいろいろやってみましたが、さっぱり見当がつかず、どうやればいいのか分かりませんでした。よろしくお願いします。

Aベストアンサー

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならないでしょうか?
Excel2007の場合は↓のURLが参考になるかもしれません。

http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/excel2007-ny_kis2.html

尚、同一Sheetに「名簿表」を作成する場合は名前定義する必要はなくて
「元の値」の右側の四角をクリックし、リスト表示したいセルをそのまま範囲指定すればOKです。

以上、お役に立てば良いのですが・・・m(_ _)m

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならない...続きを読む

Qエクセルで同じ条件のセルをカウントする

簡単な方法なのかもしれませんが、エクセル初心者なので教えて下さい。

    食事
山田  ○
小林  ○
鈴木  ○
佐藤 
高橋  ○
合計

このような場合、食事の必要な人数・4人を合計欄に記したいと思っています。
どのような計算式を入力すればいいでしょうか。
宜しくお願い致します。

Aベストアンサー

「=counta(b2:b6)」で出ませんか?

Qエクセル(Excel) 納品書の作り方【画像修正版

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が見にくかったのでシート<CENTER></CENTER>だけにしました。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルでコピー!
そのまま最後の24行目までコピーしておきます。

F4セルには
=IF(COUNTBLANK(B4:E4),"",D4*E4)
という数式を入れ、F24までオートフィルでコピー!

これでB列に商品番号を入力すればSheet2のデータが反映され、
E列に数量を入力でF列に金額が表示されると思います。

最後に合計金額のF26セルは
=IF(COUNT(F4:F24),SUM(F4:F24),"")
手数料のF27セルは
=IF(F26="","",F26*0.2)

これで何とか形にならないでしょうか?

※ 振込金額の欄は不明ですので手を付けていません。

参考になりますかね?m(_ _)m

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルで...続きを読む

Qカウント関数の入力方法教えて!!

一行に○と×を入力して、別々にカウントすることは可能でしょうか?
たとえば、

            ○ ×
A:○○××○   3 2
B: ××○×○   2 3

とでるようにしたいのですが・・・・

よろしくお願いします。

Aベストアンサー

「countif」という関数を使ってください。
=countif(A3:A7,"○")
とすれば、A3からA7の一行にある「○」の数が帰ってきます。

Qエクセル(Excel) 納品書の作り方【改めて】

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が貼り付けてあります。商品名は1番以外伏せさせていただいています。
くっつけてありますが、左側がシート1・右側がシート2です。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

画像がいまいちよく見えないのですが、納品書の項目は左から、No、商品番号、商品名、単価、数量、金額でいいのでしょうか(名前は多少違っていても意味があっていればもんだいないです)

でしたら、
C1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,2,FALSE))
D1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,3,FALSE))
E1セルは空白で
F1セルに=IF(D2="","",D2*E2)
といれて、C1からF1までをコピーしてその下の行にタテに貼り付ければ出来ますよ。
おそらくエラーが出たのは、コピーしたときにVLOOKUP関数の最初のセルの指定がずれてしまっているのでは無いかと思いますよ。     

Q2重条件付きセル数のカウントについて

A1~D5セルに日付データが入力され、E1~E5セルにその行の担当者(a,b,c等重複あり)が記入されています。この場合、A1~D10セル全体で条件付き(当日以前の日付)セル数のカウントは=COUNTIF(A1:D5,&(TODAI()))で求めることができましたが担当者別(行毎)に求めることが可能でしょうか。なお表は下記のようになっています。
A   B   C   D  E
1 4/06 6/10 3/15 8/12 a
2 6/12 2/25 6/19 9/12 b
3 5/10 5/15 3/3 6/10 C
4 3/03 2/10 2/6 8/10 a
5 7/10 12/1 7/7 9/03 C
当日が4月20日の場合、
担当者aの場合カウント数5
担当者bの場合カウント数1を求めたいのですがよろしくお願い致します。OSはウインドウズ2000です。

Aベストアンサー

F1にaかbかcを入力して、
G1に下記の式を入力するとできるみたいです。
G1の式は配列なのでCtrl+Shift+Enterで入力してください。
(自信なし、しかも式が長くてカッコわるいです。。。 はずかしー!)


{=SUM((IF($A$1:$A$5<=TODAY(),IF($E$1:$E$5=$F$1,1,0),0)))+SUM((IF($B$1:$B$5<=TODAY(),IF($E$1:$E$5=$F$1,1,0),0)))+SUM((IF($C$1:$C$5<=TODAY(),IF($E$1:$E$5=$F$1,1,0),0)))+SUM((IF($D$1:$D$5<=TODAY(),IF($E$1:$E$5=$F$1,1,0),0)))}

Qエクセル2007でプルダウンで選んだものに反応

Excel2007でプルダウンで選んだものに反応して隣のセルが自動入力される方法(エクセル2007)
A1をプルダウンで「猫」「犬」から選べるようにし、「猫」を選んだ場合B1に自動に「111」が、「犬」を選んだ場合B1に自動に「222」と入力されるようにしたいです。
ご教授の程、宜しくお願いします。

Aベストアンサー

VLOOKUP関数での方法です。
(1)別シートに入力文字列と対応コード表を作成。(仮にSheet2のA:B列範囲で順不同)
(2)B1に=IF(COUNTIF(Sheet2!A:A,A1),VLOOKUP(A1,Sheet2!A:B,2FALSE),"")を設定
   入力文字列が存在しない場合は空白としています。

QExcelのセルに指定した色をつけたい

データセル縦20×横31の表が2つ、上下に並んでいます。
一方の表(A)のセルに3~20までの数字を入力すると、もう一方の表(B)の、場所が対応したセルに、Aの番号をカラーパレットの番号とした色をつけたいのです。
縦は氏名、横は日付で、グループ編成の色付スケジュール表を作るのが目的です。
自動更新、または、Aに数字を入力後F9による手動更新、いずれかの方法によるVBAを考えています。
VBA初心者のため、手がかりを教えていただきたいと思います。宜しくお願いします。

Aベストアンサー

あくまでも手がかりということで。宜しくお願いします。
まず目的はセルに色をつけるということですので、マクロの記録を開始して、B表の任意のセルにセルの書式設定→パターンで色付けします。これで記録されたマクロはセル選択の部分と、色付けの部分でこれは後に使います。
次に入力を契機に走らせるVBAはワークシートのChangeイベントを使います。具体的にはVBEを開いてプロジェクトエクスプローラの当該シートをWクリックするとシートのイベントの窓が開くので左上の小窓の(General)という所をWorksheetに切り替え、右上の小窓でChangeを選びます。これで表示される
Sub Worksheet_Change
が、このシートに入力される都度呼び出されます。Targetは入力されたセルです。
で、この中にまず Target.Rowと Target.ColumnがA表の中であるかどうかを判定するIF文を設けます。
範囲内なら先ほど記録したもののうちセル選択をTarget.Offset()を使い必要なだけ(A表からB表の位置の差)ずらせたセルを選び、色付けにはTarget.Valueを使うという形になるかと。

あくまでも手がかりということで。宜しくお願いします。
まず目的はセルに色をつけるということですので、マクロの記録を開始して、B表の任意のセルにセルの書式設定→パターンで色付けします。これで記録されたマクロはセル選択の部分と、色付けの部分でこれは後に使います。
次に入力を契機に走らせるVBAはワークシートのChangeイベントを使います。具体的にはVBEを開いてプロジェクトエクスプローラの当該シートをWクリックするとシートのイベントの窓が開くので左上の小窓の(General)という所をWorksheetに...続きを読む


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

人気Q&Aランキング

おすすめ情報