• ベストアンサー

エクセルについて(その2)

前回、「塗りつぶしたセルをカウントしたい」を質問させて頂きましたが、これに関係し、恥をしのんでお尋ねします。 出来ることなら色別に塗りつぶしたセルをカウントしたい(4種類くらいの色を)のですが、どのようにしてユーザー定義関数をいじれば良いのか分かりません!! お手数をお掛け致しますが、是非、教えて下さい!! 宜しくお願い致します!!

  • maro-h
  • お礼率81% (128/157)

質問者が選んだベストアンサー

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.16

No.15 のレスに対してですが・・・  > 本質問の趣旨から離れそうですね。 質問者のmaro-hさんを混乱させているだけです。 > SelectionChangeイベントだけでは、私がやって見ると、反応しませんでしたが、 > そういうのは、どこか間違ってますでしょうか。 間違っていると思います。 良く読んでいれば解ることですが・・・ この質問のタイトルに(その2)とあり、先頭に「前回・・・」とありますよね。 ということは、前回の質問と関連ある訳ですよね。 ですので、前回の質問の回答を最初から《良ぉ~く読んで》ください。 または、この質問の No.2 と No.1に対しての質問者からの「回答に対する補足」欄を 良ぉ~く読んでください。 そのあとで No.5 を見てください。 これらを読んで(その通り実行して)頂ければ、解ると思います。 しかし、説明にも書いておきましたが、色を変更した場合、カウントし直すのは、 《他のセルをアクティブにした時点》ですので、完璧な方法では、ありません。 このシートをビジネスで使用し、色をカウントすることが、商取引に影響する 重要なことですと、この方法は、使用しない方が無難です。 (そうかといって他の方法は、気付きません。無いかも?) maro-hさん 混乱させてごめんなさいね。

maro-h
質問者

お礼

ja7awu様、感激です。 私の質問に対し、これほどまでにご丁寧に色々と教えて下さり、本当に感謝しています。 正直な所、私はエクセルの関数云々に関しては、ほぼ初心者でして、仕事上、ごくごく単純に、「セルを色別にカウントしたいなぁ」と考え、いつまでも悩んでいたのです。 で、偶然にもこのサイトを見つけ、「もしかすると、誰かが知っているかも…」程度の気持ちで投稿してみたのです。 そして、ja7awu様をはじめとする数多くの方が回答して下さり、勉強と共に励みにもなりました。 …でも、やはり、今の私のレベルではかなり荷が重い内容の質問だったらしく、皆様の回答についていくのが精一杯で…いや、ついていけていなかったのが、事実なのです。 ですので、今は単純に、一から教えて頂ければ、それが私にとっては最高の回答だったのです。 本当にお恥ずかしい話なのですが、結局、何をどうすれば私の投稿が解決するのか、未だに分かりません…。 ですが、これに懲りず、これからもエクセルに取り組んでいきたいと思っています。 この度は有難うございました!!

その他の回答 (15)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.15

#12等です。#14のご指摘に対し >「塗りつぶしたセルをカウントしたい」ですよ。 それは初めから判っています。目指すものはそれなんですが、私も今回Functionプロセジュアーが、書式 変更には反応しないことを、実感したようなことです。 ○#5のご回答で、Functionプロセジュアーで回答があリますが、この制約を免れることは出来ないと思いました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)   Calculate End Sub を入れておられるのは、その手当てのためと理解して良いでしょうか。 しかし上記SelectionChangeイベントだけでは、私が やって見ると、反応しませんでしたが、そういうのは、どこか間違ってますでしょうか。 反応しない以上、Calculate も出番がない と言うことかなと思います。 元々Functionプロセジュアーは値を変えるために 使うもので、その引数に指定されている範囲のセル値や式が変ると反応してくれるものだと言うことが、今更ながら、勉強させてもらいました。 上記の点明確に教えていただければありがたいですが、本質問の趣旨から離れそうですね。

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.14

No.12 についてですが・・・ > セルの値を変えるような操作 問題を良く読んでください。 「塗りつぶしたセルをカウントしたい」ですよ。 「セルの値を変えた時」とありますか??

  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.13

No.6です。 >ユーザー定義関数では難しそうなので、 これは、"作るのが"という意味です。誤解を招きそうなので・・・。 ひとつのセルに入れた関数だけで色別の結果を出したい、と思っていましたので。 で、私も一つ作ってみました。 引数の「範囲」は、調べたいセル範囲を。 「基準」は、調べたい色で塗られたセル(一個)を指定してください。 「基準」のセルは、「範囲」の中でも、外でもかまいません。 Function CountInCol(範囲 As Range, 基準 As Range)   Dim c As Range, i As Long   For Each c In 範囲     If c.Interior.ColorIndex = 基準.Interior.ColorIndex Then       i = i + 1     End If   Next c   CountInCol = i End Function

maro-h
質問者

お礼

お礼の挨拶が遅くなり恐縮です。 sakenomo様には、何かとプログラムを考えて頂き、本当に感謝しています。と同時に、「凄いなぁ」とも感服しています。 何はともあれ、本当に有難うございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.12

#11です。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)   Calculate End Sub の有無に関係なく、セルの値を変えるような操作 ・値を入れる ・下矢印でセル値を移動する ・DELキーでデータを消す などをすると #9のルーチンだけの場合も、「色変更のセルの数え直し」を実行してくれるようです。 Functionプロシージュアは「セルの値の変更」に反応して、全Functionプロシージュアを実行し直する仕組みであって、SelectionChangeのcalculateだけでは反応しないようです。だからSelectionChangeのプロシージュアのcalculateの後にダミーの演算を入れると、いつも反応しました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.11

#9です。 #10でご指摘があり、良く見ると、同じロジックで既に 回答が出ていました。それ以外のを見て、複雑だなと思ってしまい、良く見ておらず失礼しました。 ・色を変更してもカウントは、変わらないと この点不完全でした。 数式の計算のユーザー関数では変更が即時繁栄されるのに 、本件では様子が違うようで、今後勉強します。 ・nは(変数宣言)していませんが、どうしてでしょう 良くはないですが、字数を少なくするため、私のは変数宣言を省略してます。エラーが出ることはないと思いますが。 ・色を設定した場合、F9キーを押すなどで再計算しないと値が変更されません。(#1) F9キーを押しても変更されませんでした。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)   Calculate End Sub も2回目から思ったようになりません。「変更される」ときもあり良く判りません。 関数式を入れたセルをポイントし、数式バーにカーソルを 置いて、エンターを押す(式を再設定する)しないと確実には変りませんでした。 以上お詫びかたがた、不完全ですがご報告させていただきます。

maro-h
質問者

お礼

お礼が遅くなり、恐縮です。 皆様に教えて頂いた内容の物をそっくりそのまま、使わせて頂きましたが、どうも私の理想とは異なり、未だに「???」といった感じです。 ですが、色々とお話をして下さった事は、感謝しております。この場を借りて厚く御礼申し上げます。

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.10

No.9 の内容ですが、同じようなコードを書いてますね。 しかもこれでは、色を変更してもカウントは、変わらないと思いますが・・・ cは変数宣言して、nはしていませんが、どうしてでしょう。 初心者ですと、エラーが出て実行できないと思いますが・

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.9

既回答は複雑ですが、下記で良いですか。 VBEの標準モジュールに下記を貼りつける。 Function cntcolor(r As Range, cl As Integer) Dim c As Range n = 0 For Each c In r If c.Interior.ColorIndex = cl Then n = n + 1 End If Next cntcolor = n End Function そして色で塗りつぶしたセル数を出したいセルへ関数式 =cntcolor(A1:A4,6)とかを入れる。 第1引数はセル範囲、第2引数はセル数を調べたい色のインデックス値です。セル範囲は好きなように、色のインデックス値はマクロの記録で調べるか、WEBで調べてください。 私のサンプルテストではA1,A4,A7,B9を黄色(色インデックス6)にして、 =cntcolor(A1:A4,6)は4 =cntcolor(A1:A10,6)は3 =cntcolor(A1:A4,6)は2となりました。

maro-h
質問者

お礼

ご回答、有難うございます。 皆さんから教えて頂いたやり方を色々と試している最中ですので、新たに教えて頂いた方法も試してみたいと思います。 それにしても、エクセルって奥が深いですね。

  • happypoint
  • ベストアンサー率36% (521/1422)
回答No.8

#3です。 >どれが一番、分かりやすく簡単なのか、私には分かりません… みなさんがいろんないい方法を考えてくださるので、 うれしい悲鳴のようですね。 要約しますと、 ・とにかく簡単に解決するなら、#2さんの方法。 (VBAを使わないので、わかりやすいかと思います。  参考URLに、図解で説明があります。) ・作業列を作りたくないという場合は、VBAを使った方法となります。 (1) sakenomoさんの方法は、「マクロ」を実行したら結果を書き込む方式 不要な作業列を作らないで済みますので、見た目を気にする場合や、 結果だけを素早く求めたいときに適しているでしょう。 (2) ja7awuさんの方法は、「ユーザー定義関数」を作成して関数で結果を求める方式です。 関数を入力する画面(関数パレット)に、 色のついたセルをカウントする「CCount」関数が現れ、 あたかも通常の関数(SUMとかIFとか)のように使えるようになります。 ちょっと難しく見えますが、非常にスマートな方法です。

maro-h
質問者

お礼

なるほど…単純な私にでも、何となく分かりました。 それにしても凄いですね、こんなに簡単に要約できる方がすぐにお答えして下さるなんて…。 皆さん、凄すぎです。 私も皆さんに習い、少しでもエクセルが今以上に使いこなせるよう努力したいと思います。 この度は有難うございました!!

  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.7

#6です。そそっかしいもので・・・。 >i As Integer 上記だと調べるセル範囲が大きい時にエラーがでるかも知れないので、 i As Long に修正してください。

maro-h
質問者

お礼

分かりました。 皆さまから教えて頂いたものを一つ一つ、試していきます。 有難うございました。 (でも、正直な所、どれが一番、分かりやすく簡単なのか、私には分かりません…どなたか、まとめて下さると助かるのですが…なんて)

  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.6

#4です。 ユーザー定義関数では難しそうなので、普通のマクロでやってみました。知りたいセル範囲を選択して実行してください。A列を挿入して、結果を出します。 Sub test() Dim c As Range, r As Range, i As Integer, b As Byte Set r = Range(Selection.Address) For Each c In r If c.Interior.ColorIndex <> xlNone Then If b = 0 Then Range("A1").EntireColumn.Insert b = 1 End If i = 0 Do With Range("A1").Offset(i, 0) If .Interior.ColorIndex = xlNone Then .Interior.ColorIndex = c.Interior.ColorIndex .Value = 1 Exit Do ElseIf .Interior.ColorIndex = c.Interior.ColorIndex Then .Value = .Value + 1 Exit Do End If End With i = i + 1 Loop End If Next c r.Select End Sub

maro-h
質問者

お礼

度々のご回答、本当に有難うございます。 教えて頂いた通りに実行してみたいと思います。(…時間が掛かりそうですが…) こんなに幾度も教えて頂けるなんて、光栄に思います。 本当に感謝致します。

関連するQ&A

  • エクセル

    Excel2010で、色つきセルの中で指定した文字列を数える数式はありますか? 入力された文字列は15種類、それが色つきセルになっているものと、色がついていないセルに分かれています。文字列別のカウント(色つきセルも色無しセルも区別のない、文字列のみの条件でのカウント)はCOUNTIFで既に出ていますが、色つきになっているセル限定で文字列別にカウントするのはどうしたらいいでしょうか?

  • Excelの条件付き書式の背景色を取得すると・・

    Excel2016を使用しています。 セルの背景色を取得するユーザー定義関数を作って色番号を調べました。 (1)条件付き書式でセルの背景色を塗りつぶしたセル(B1) (2)直接背景色を塗りつぶしたセル(B2) (3)背景色を塗りつしていないセル(B3) 上記3種類を調べたところ、(2)だけは色番号を示し、(1)(3)は何も塗りつぶしていないという結果になりました。 どうして(1)は色を反映していないのでしょうか?

  • エクセルで複数の条件に合うセルをカウントするには

    こんにちは。 エクセルについて質問です。 ある集計をやっているのですが、カウントがうまくいきません。 7/10(白) 7/20(黄) 7/10(黄)  *()はセルの色 簡単に書くと上の表のようなものを集計するのですが、「セルの色=黄色かつ日付=7/10」というセルの数をカウントしたいのです。 指定した色のついたセルをカウントする関数は、下のURLの質問を見て作りました。 どのような関数を組み合わせればできるでしょうか…。 わかりにくい質問かもしれませんがよろしくお願いします。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=59571

  • エクセル 2003 関数

    エクセル 2003 関数 お世話様です。 XPのエクセル2003にてセルA1に数値の3を入れております。 これをセルC5の文字間に関数値として挿入する事は可能でしょうか? 例: セルA1に数字の3、セルC5に【カウントです。】と入力されていたら    【カウント3です。】となります。 セルA1の数値によってセルC5の入力内容が変わるようにしたいのですが 可能でしょうか? お手数ですが、ご存知の方がいましたらご教授下さい。 以上、何卒宜しくお願い致します。

  • Excelのcountif関数について

    エクセルのcountif関数について質問をさせていただきます。 Countif関数で「B1」と「B2」や「N」と「n」いう数値を別数値として数えたいのですが、 countif(セル:セル,"B1"」 と入れると、どうもB2もカウントされてしまいます。 別数値としてカウントする方法を教えていただけないでしょうか。 宜しくお願いします。

  • excelマクロ subプロシージャに関して

    excelでセルの色を変えるというものをコーディングしました。 選択したセルの隣のセルの値がそれぞれ、○だったら選択したセルの色を変えるプログラムです。 引数なしのため、ユーザー定義関数として定義することができず?、subプロシージャとして定義しているので、 シート内で全ての行に対応させることができず、実行するには一行ずつ、マクロの実行をさせなければ、このプロシージャを使えず、困っています。1行ずつでは作った意味がないので。。。 作ったプロシージャが手元にないので、明日アップしたいと思いますが、質問の意味がわかるかたいましたら、お願いします。

  • Excel ユーザー定義について教えてください!!

    よろしくお願い致します!! Excel「セルの書式設定」→「<タブ>表示形式」→「ユーザー定義」に、新しく「種類」を追加し保存後終了しました。 同じ文書ではなく、新たにExcelを立ち上げると、追加したユーザー定義がありません。ユーザー定義とは、「追加したBookでのみ有効」なのでしょうか??? ご回答、どうかよろしくお願い致します。

  • エクセルの書式設定の「#」

    エクセル2002の書式設定についてですが、セルの書式設定の「表示形式」で「ユーザー定義」にします。そして種類のところには「#」と入れました。 セルに「999」と入力すると「999」と表示されました。 ところが「ユーザー定義」の種類のところには「#,」と入れました。 するとセルに「999」と入れても「1」と表示されます。 またセルに「9999」と入れたら「10」と表示されました。 これはどうしてでしょうか?

  • Excel ユーザ定義関数を作りたい

    ユーザー定義関数を作りたいのですが どのような本で勉強をしたら良いのかがわかりません。 お勧めの本などがあれば教えてください。 C言語は一通りできます。 とりあえず作りたい関数が一つあってインターネットで調べながら 作っているのですが 選択したセルの背景(塗りつぶしの色?)を 変更するにはどうすればよいのでしょうか? 以上二つについて宜しくお願いします。

  • エクセル2007のユーザー定義について教えてください。

    エクセル2007のユーザー定義について教えてください。 A1のセルにX001のようなコードが入力されている場合,RIGHT関数を使って右端の1を抽出し,この1に「日目」などの文字を結合して「1日目」と表示したいですがセルのユーザー定義で可能でしょうか。=RIGHT(A1,1)&"日目"のようにやればできますが,セルのユーザー定義でやりたいと思っています。

専門家に質問してみよう