• ベストアンサー

Excelの文字色でカウントし平均を求める関数

いつもお世話になっております。 今回は、エクセルで使用文字色黒と赤のうち、 黒のみ入力した数値を抽出し平均をだしたいのですが どのようにして関数またはVBAを組んだらよいでしょうか。 よろしくお願いいたします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.4

>空欄のセルも選択しつつ計算から所外 public function averageblack(byval target as excel.range) as double  dim h as range  dim res as double, N as long  application.volatile  for each h in target   if h <> "" and isnumeric(h) and h.font.color = rgb(0,0,0) then    res = res + h.value    n = n + 1   end if  next  averageblack = res / n end function 使い方は同じですが,文字色「黒」と「自動」のどちらでもよくしました。 ただし条件付き書式はダメです。

imaimaimagin
質問者

お礼

回答ありがとうございます!! keithin さんの方法で無事解決できました! 感謝いたします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.1です! >ちなみに・・・黒文字も赤文字も表示のまま >かつ、空白のセルは自動除外をして計算してくれる方法 当方の思い込みかもしれませんが、前回のA列の「赤文字」に関しては 条件付き書式が設定してあるのでは? Excel2003までのバージョンだと条件付き書式での色識別は難しいと思います。 (VBAのコードにその条件を入れてやる必要があります) ただ、Excel2007以降のバージョンだと前回同様「色フィルタ」が利用できますので、 一例です。 Sheet2を作業用のSheetとしていますので、Sheet2は使用していないという前提です。 Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub Sample2() Dim i As Long, wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("Sheet1") Set wS2 = Worksheets("Sheet2") Application.ScreenUpdating = False wS1.Range("A1").AutoFilter field:=1, Operator:=xlFilterAutomaticFontColor wS1.Range("A:B").Copy wS2.Range("A1") wS2.AutoFilterMode = False For i = wS2.Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 If WorksheetFunction.CountBlank(Range(wS2.Cells(i, "A"), wS2.Cells(i, "B"))) > 0 Then Rows(i).Delete End If Next i wS1.Range("D1") = WorksheetFunction.Average(wS2.Range("B:B")) wS2.Cells.Clear wS1.AutoFilterMode = False Application.ScreenUpdating = True End Sub 今回はD1セルに表示するようにしています。 ※ データのレイアウトは前回アップした配置だとします。 ※ A列は条件付き書式が設定してあり、「黒」のフォントは「自動」になっている。 ※ 最初に書いたようにExcel2007以降のバージョンで何とか動くと思います。m(_ _)m

imaimaimagin
質問者

お礼

回答ありがとうございます。 赤文字は、条件付き書式ではありませんが、なんとか解決できました!!

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける public function averageblack(byval target as excel.range) as double  dim h as range  dim res as double, N as long  application.volatile  for each h in target   if isnumeric(h) and h.font.colorindex = xlautomatic then    res = res + h.value    n = n + 1   end if  next  averageblack = res / n end function ファイルメニューから終了してエクセルに戻る テキトーなセル範囲、仮にA1:A10に赤文字や黒文字の数字を記入する 平均値を表示したいセルに =averageblack(A1:A10) と記入する #注意 1.「黒文字」は文字色「黒」ではなく、文字の色「自動」とします 2.マクロを使うすべての方法の制約として、「文字の色を塗り替えた」直後に自動で計算結果に反映する方法はありません。  今回の関数の方法では色を塗り替えた後に、F9キーを押すとか、どこかのセルに何かを記入するなどして再計算を明示的に走り直させる必要があります。 3.言わずもがなですが、例えば与えたセル範囲に一つも数字が記入されていないなど、計算ができない場合はエラーを表示します。

imaimaimagin
質問者

お礼

回答ありがとうございます。 ちなみに、空欄のセルも選択しつつ計算から所外して くれる方法はありませんか? 図々しくてすみません

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! >黒のみ入力した数値を抽出し平均をだしたいのですが Excel2007以降のバージョンをお使いであれば「色フィルタ」で 何とか対応できると思います。 元データのレイアウトが判らないので勝手に↓のような感じでやってみました。 A列のフォント色は「自動」または「赤」のみとします。 D1セル(オートフィルタをかけても非表示にならないセル)に =SUBTOTAL(1,B:B) という数式を入れておきます。 オートフィルタ → A列でフィルタ → 色フィルタ → 「自動」を選択しOK これで画像のような感じになります。 ※ Excel2003までのバージョンの場合は「色フィルタ」は使えませんので VBAになってしまいます。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, cnt As Long, vL For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 1).Font.ColorIndex <> 3 Then cnt = cnt + 1 vL = vL + Cells(i, 2) End If Next i MsgBox vL / cnt End Sub 'この行まで ※ マクロの場合は抽出はしていません。m(_ _)m

imaimaimagin
質問者

お礼

回答ありがとうございます。 表はtom04さんが作成した状態に似てます。 ちなみに・・・黒文字も赤文字も表示のまま かつ、空白のセルは自動除外をして計算してくれる方法 っていうのは難しいですか? 注文が多くてすみません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 黒い文字のみの最大および最小値のカウントについて

    何度も失礼します。 再びVBAについて、質問させていただきます。 エクセル2010を使用しています。 今回は黒文字のみ(文字色1)の数値で最大値と最小値の抽出を したのですが、どのようにしたらよいでしょうか?

  • Excelの関数?で困っています。

    Excelの関数?で困っています。 こんにちは。Excel2007を使用しています。 セルの中にある特定の文字が含まれている場合は、ある文字の後ろの数値を抽出するということはできますか? 例えば、セルA1に『AA-11 $100.00』、A2に『BB $ 95.00』と入力されている場合、『AAという文字が含まれている場合はB1に$マークの後ろの数値を抽出、BBという文字が含まれている場合はC1に$マークの後ろの数値を抽出する』というものを関数などを使用して作ることはできるのでしょうか? もしできるのであれば、ぜひご教示ください。 宜しくお願いします。

  • エクセル:一定以上の数値になると文字色を変える関数

    エクセルの関数で、一定以上の数値は文字色が変わるような関数はありますか。 例えば、10以上だと赤い字で表示したい場合、1-9は黒、でも12は赤文字 で表示するようなイメージです。

  • Excelの文字列関数について

    Excelの文字列関数について こんにちは。Excel2007を使用しています。 先日、こちらで質問させていただいた【QNo.5785641】の続きになるのですが・・・ セルの中にある特定の文字が含まれている場合は、ある文字の後ろの数値を抽出したいという質問で、 例えば、セルA1に『AA-11 $100.00』、A2に『BB $ 95.00』と入力されている場合、『AAという文字が含まれている場合はB1に$マークの後ろの数値を抽出、BBという文字が含まれている場合はC1に$マークの後ろの数値を抽出する』というものを関数を使用して作りたいというものに対し、 =IF(COUNTIF(A1,"*AA*")=1,RIGHT(A1,LEN(A1)-FIND("$",A1)),"") =IF(COUNTIF(A1,"*BB*")=1,RIGHT(A1,LEN(A1)-FIND("$",A1)),"") という回答をいただきましたが、さらに追加で質問です。 例えば、セルA1に『AA-11 $100.00 aabbcc』、A2に『BB $ 95.00 abc』というように、抽出したい数値の後ろにも文字が入力されている場合はどのようにしたらよいのでしょうか? 宜しくお願いします。

  • エクセル関数で文字色

    エクセル2002使用です。 セルA1に文字色(例えば赤)のついた値が入力されています。 セルB1に=A1と入力すると、値は入力されますが、 文字色が黒に変わってしまうのですが・・・ 文字色も含めて移動させる方法を教えてください。 初歩的な質問ですいません。 よろしくお願いします。

  • エクセル関数の書き方、入力方法

    エクセル関数の初心者です。関数の書き方で下記の内容について教えて下さい。 例えば、1行のセルA1~P16の表に入力された数値(1~3桁)で、少ない数値を5個を自動的に抽出し、その平均値を出す関数の書き方が分かりません。 但し、表中に同じ少ない数値が複数有る場合、その複数を含め5個抽出する式としたいのですが、どのような関数とすればよいでしょうか。

  • ExcelのAVERAGE関数で、ゼロを含めない平均値の出し方

    いつも大変お世話になっております。 ExcelにAVERAGE関数がありますが、セル内に予め数式を入れておいて、その結果から平均値を出したい場合、数式の結果が出ているものだけ(つまりゼロでないものだけ)の数で平均値を出したいのですが、何か良い方法はありますか? 具体的には 4月 5月 6月 7月 8月 9月 上期 4  3  2  0  0  0  平均値を算出 上記のような表があり、数字はそれぞれ数式より算出しています。その数値をもとに、「上期」のセルにはAVERAGE関数より平均値を算出したいのですが、6月の時点では、まだ6月までの数値しかなく、7月・8月・9月は計算式だけ入っている状態なので「ゼロ」となります。 6月の時点で、4月~9月の平均値を算出すると(4+3+2+0+0+0)/6をしてしまい、平均値が実際の数値より低くなってしまいます。 そこで、実績のある月だけ(今回は4~6月だけ)の平均値を「上期」セルに出したいのですが、毎回計算式を更新などせず、どのような方法をとればできますか? よろしくお願い致します。

  • エクセルの関数について

    いつもお世話になっております。 エクセルの操作(関数)について質問があります。 A列に日付、B列に数値を記載したデータがあります。 (1)データの抽出日を指定して、その日より○日前までの最大値、最小値 (2)上記と同じ条件で、マイナス平均、プラス平均 の求め方を教えてください。 分かりづらい文章で申し訳ありませんが、よろしくお願いいたします。

  • エクセルで、色のついた文字をカウントする

    エクセル2000を使用しています。 以前にも似たような質問がありましたが 改めて質問させていただきます。 エクセル2000で会社の売上表を作成しており、 その中のデーターの中には商品の状態に より、赤、緑、黒、青と色で区分をわけています。 そのデーターの中で各色で入力されたもの で、空白は除くデータの数を数えたいのです。 VBAでいろいろためしてはみたのですが、なかなかうまくいきません。すみませんが宜しくお願い致します。

  • excel で入力する文字色を 赤にしたい

    お世話になります。 excel2010を使用しています。 入力したときのデフォルトの文字色が黒なのですが、 これを赤にしたいのです。 現在は、毎回、 (1)黒で入力 (2)文字色を赤に変更 を繰り返していますが (1)の段階で赤にしたいのです。 新規に入力するセルを、(1)の段階から赤にできるか? →できるので、あればその方法を 既に入力されているセルの末尾に、文字を追加した場合(1)の段階から 赤にできるか? →できるので、あればその方法を の2点を教えて頂けないでしょうか? ご知識あるかた 何卒よろしくお願い致します。

快速小型無線LAN子機のつなげ方
このQ&Aのポイント
  • デスクパソコンWindows10でWi-Fiのアイコンが消えました。表示させる方法を教えてください。
  • 質問:デスクパソコンWindows10でWi-Fiのアイコンが消えてしまいました。解決方法を教えてください。
  • デスクパソコンWindows10でWi-Fiのアイコンが見えなくなりました。どうすれば表示されるようになりますか?
回答を見る

専門家に質問してみよう