質問: エクセルで文字色がついているセル数をカウント エクセル初心者です。 エクセルセルに 佐藤 鈴木 青山 渡辺 と入力されてあって佐藤と鈴木の文字の色が青だった場合文字色(青)がついているセルをカウントし,あるセルに2と表示することはできるのでしょうか。条件付書式や検索と思いましたがわかりません。よろしくお願いします。
回答: 質問者様お使いのエクセルのバージョンが不明なので何がアレですが いちおう 2000 で作成した経験からアドバイスさせていただきます。 >文字色(青)がついているセルをカウントし, 1 残念ながらマクロを使わないと,ご希望のことは難しいようです。 以下に手順を記しますので参考にしてください。 (1) [ツール]-[マクロ]-[visualbasiceditor](またはalt + f11)で vbe画面にします。 (2) vbe画面上で[挿入]-[標準モジュール]を選択します。 するとコードウィンドウが出ますので、以下のコードを記します。 (コピー&ペーストでもok) ---------------------------------------------------------------- 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 ---------------------------------------------------------------- (3) 元のワークシートに戻って、カウント結果を表示させたいセルに、 赤字のカウントは =specialcell(a1:e5,3) 青字のカウントは =specialcell(a1:e5,5) 黄字のカウントは =specialcell(a1:e5,6) などとすればokです。 ただし、フォント色が黄でセル色が青などというのは、どちらにも カウントされてしまうので注意が必要です。 ☆参考:ブックの標準カラーパレットのインデックス番号 (vbエディタのヘルプにて「colorindex」を検索、参照した) 1 黒 2 白 3 赤 4 黄(薄)緑 5 青 6 黄 7 桃色 8 水色 9 茶色 10 緑 11 紺 (濃い緑) 以下 ~ 56 まであるようです。 2 別解(参考) ----------------------------------------------------------- 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引数には指定する色の(サンプル)セルを当てる。 ※sumif 関数の併用も可 2 実は、マクロを使わない方法があります。 5~6年程前に、何処かで教わった記憶があります。 色を判定する式(=get.cell(**,**))をブックに登録、判定結果を 表示したいセルに、登録した式の定義名で記述する。 その判定結果を sumif や countif 関数の引数として再利用する。 以下は、その手順です。 (1) 色を判定する式を登録 メニューバー「挿入」→「名前」→「定義」名前の定義画面にて 「参照範囲」欄に 「=get.cell(検査の種類を指定する番号,判定したいセル番地)」 名前欄に式の名前を(「文字の色」や「セルの色」等)付けて 「追加」→「ok」で登録完了 ☆検査の種類を指定する番号とは? 20→フォントは太字か否か?を判定 24→文字フォントの色を判定 63→セルの塗りつぶし色を判定 なお、後から書式を変更しても結果が自動的には更新されないので、 now 関数を組み込み「f9」キーで更新させた方が良いようです。 例「=get.cell(**,**)+now()*0」(0を足している為、値に影響なし) (2) 判定した結果を表示させる 判定結果を表示したいセルに「=定義した名前」という式を入力 すると色の種類すなわち色の番号を判定結果として表示してくれる 色の番号(excel のヘルプでカラーインデックスを参照できる) 例☆黒字(無指定)=>0 赤 =>3 青 =>5 緑 =>10 薄緑 =>4 ※その他も、実際に試してみれば結果は分かるはず (3) 判定した結果を、sumif や countif関数の引数として利用する。 言葉で説明するのは非常に難しくこれで理解していただけるかどうか 自信がありませんが、この、色の判定式を登録してしまうという方法は excel97 から excel2002までのバージョンで活用できることは確認済み です。 もちろんこれも sumif 関数との併用(数字として計算する)が 可能です。 実際のサンプルファイルを見ていただければいいのですが、なかなか 良い方法が思いつきません。 excel2007 で読み込んでも反映されましたが、2007でどう作成するの かは、残念ながら 2007 での作成経験がないので説明できません。 ところで、この okwave には office 系ソフト専門のカテゴリもあり ます。 そっちの方が詳しい人が多いと思うので、今後は使用ソフトの バージョンも併記してそちらで質問されるようにした方が解決が速いと 思われます。 http://okwave.jp/207/218/c232.html なお、老婆心ながら、その場合の複数カテゴリにわたる(多重投稿) マルチポストには気をつけましょう。 参考url:http://miyahorinn.fc2web.com/faq/faq030.html,http://hp.vector.co.jp/authors/va016119/hajimete/udf1.html