
エクセルで表の中の上位3位に着色し、色フィルターで上位3位の値をSUBTOTALで平均を求めたいのですが、例えば上位3つ(2つ)が同じ値の場合、次の4位の値がフィルターで抽出されます。
この状態で色フィルターを書けると、無着色の4位までが抽出されます。
フィルター前には上位3位に選ばれているために着色されてしまいます。
この状態で色フィルターを書けると、無着色のセルなのに抽出されて色付セルの平均に組み込まれてしまうので結果がズレてしまうので困っています。
フィルター後に着色セルをVBAで集計しようとしましたが、下記で
=ColorCount、=ColorSumともに0になってしまいます。
VBAは初心者なので出来れば関数で何とかしたいのですが、下記程度なら使えそうなのですが何が悪いのかアドバイスいただければ助かります。
Function ColorCount(R1 As Range, C As Range)
Dim r As Range
Application.Volatile
ColorCount = 0
For Each r In R1
If r.Interior.Color = C.Interior.Color Then
ColorCount = ColorCount + 1
End If
Next r
End Function
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Function ColorSum(R1 As Range, C As Range)
Dim r As Range
Application.Volatile
ColorSum = 0
For Each r In R1
If r.Interior.Color = C.Interior.Color Then
ColorSum = ColorSum + r.Value
End If
Next r
End Function
No.4ベストアンサー
- 回答日時:
本来の目的は何ですか?
着色することですか?
フィルタを掛けることですか?
それとも、上位3までの平均を出すことですか?
もし、平均を出すだけなら、こんな数式でも行けると思いますよ。
=(LARGE($A:$A,1)+LARGE($A:$A,2)+LARGE($A:$A,3))/3
>上位3までの平均を出すこと
です。
上位に同値がある場合の懸念事項の解消で、LARGE関数があることをすっかり失念しておりました。
大昔に使ったことはあるのですが、「条件付き書式」と「色フィルター」で出来ると思い込んでしまっていました。
一発解決しました。
No.3
- 回答日時:
こんにちは
>出来れば関数で何とかしたいのですが
関数ではフィルターをかけたり色を参照することはできません。
一方で、ご質問の趣旨は
「セル範囲中の上位3つの値の平均を求めたい」
ということと解釈しました。
それだけであるなら、関数でも可能です。
上位から並べた際に同値で3位(あるいは2位、1位)が複数あって、順位的に3位までが個数としては4つを超えてしまう可能性がありますが、その際でも「上から3つ」だけの平均を求めたいという意味と解釈しました。
添付図では、A列に対象の数値が並んでいるものしています。
上位から並べると、100、90、80、80・・・と3位が複数ありますが、あくまでも上位3つの平均(=(100+90+80)/3)を求めるという例です。
添付図では、C1セルに
=AVERAGE(INDEX(SORT(A1:A10,,-1),ROW(A1:A3)))
の式を入力して求めています。
(※ 365環境を想定しています)
A列の値を変えて、試してみてください。

>上位から並べた際に同値で3位(あるいは2位、1位)が複数あって、順位的に3位までが個数としては4つを超えてしまう可能性がありますが、その際でも「上から3つ」だけの平均を求めたいという意味と解釈しました。
まさにご推察の通りのことで悩んでいました。
ご回答参考になりました。
が、今回は#No4さんのご回答がピッタリですのでこちらをBSにさせて頂きます。
ありがとうございました。
No.2
- 回答日時:
#1です
ごめんなさい!!
>VBAは初心者なので出来れば関数で何とかしたいのですが
ユーザー定義関数の場合、.DisplayFormatは使えなかったか・・
別法があった気がしたけれど少なくとも直接はダメだったかと・・
関数で何とか・・ Function ColorCountの内容を変えるしかないかな
例えばこんな感じ
Function ColorCount(R1 As Range, C As Range)
Dim r As Range
Application.Volatile
ColorCount = 0
For Each r In R1
If Not r.EntireRow.Hidden Then
If r.Interior.Color = C.Interior.Color Then
ColorCount = ColorCount + 1
End If
End If
Next r
End Function
これで隠れた行はカウントしないはずです
セルに =ColorCount(範囲,調べる色の付いたセル)
例 =ColorCount(A2:A20,A1)
ColorSumも同様に If Not r.EntireRow.Hidden Then End If を追加すれば出来るかな・・
ご丁寧なご回答ありがとうございます。
非常に参考になりました。
今後同様の問題の時には使わせて頂きます。
有用なご回答はリストにしていますので追加しておきます。
No.1
- 回答日時:
こんにちは
同様なFunctionなので、取り合えずColorCountについて
Function ColorCount(R1 As Range, C As Range)の使い方?
内容は、対象範囲がR1 比較する色のセルがCになっています
比較する(数える)色のセルが必要ですね
Interior.Colorなので条件書式で付いている色は対象になりません
(ここで引っ掛かっているかも)
条件書式の色なら
.Interior.Color を .DisplayFormat.Interior.Color に各所する
また、フィルターを掛けているのなら
.SpecialCells(xlCellTypeVisible)で可視セルを対象(探す範囲)にします
現状、Function ColorCountをどのように呼んでいるのでしょうか?
例:(想定)A1セルに見つける色を付けて 見つける範囲はA2~最終行
フィルタを掛けている状態で
(例はブック、シートを省略 ActiveWorkbook ActiveSheet)
Sub test01() '実行プロシージャ(表示の当該色を数える)
Debug.Print ColorCount(Range(Cells(2, 1), Cells(Rows.Count, "A").End(xlUp)).SpecialCells(xlCellTypeVisible), Range("A1"))
End Sub
Function ColorCount(R1 As Range, C As Range)
Dim r As Range
Application.Volatile
ColorCount = 0
For Each r In R1
If r.DisplayFormat.Interior.Color = C.DisplayFormat.Interior.Color Then
ColorCount = ColorCount + 1
End If
Next r
End Function
早々のご回答ありがとうございます。
週末出かけていてお礼が遅くなりました。
なるほど!!です。
>Interior.Colorなので条件書式で付いている色は対象になりません
(ここで引っ掛かっているかも)
ご明察の通りここで引っかかっていました。
ただし、今回の質問では#No4さんのご回答で解決できました。
目的にピッタリの関数がありました。
お手数をお掛けしました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
電子書籍プレゼントキャンペーン!
最大2万円超分当たる!マンガや小説が読める電子書籍サービス『Renta!』で利用できるギフトコードプレゼント実施中!
-
エクセル、日々の集計整理方法。(再送です。)
Excel(エクセル)
-
エクセルのファイルサイズが急に大きくなってしまった
Excel(エクセル)
-
エクセルで列の行の重複の検索方法を教えてください。
Excel(エクセル)
-
4
マクロか関数で処理したいのですが、教えて頂けませんか。
Excel(エクセル)
-
5
指定した数字まで累計する方法や文字例の抽出について教えてください
Excel(エクセル)
-
6
エクセルで期間に入っているかどうかの判定
Excel(エクセル)
-
7
VLOOKUP が機能しない、その原因は何 ?
Excel(エクセル)
-
8
マクロを簡潔にしたい
Excel(エクセル)
-
9
excelの数式の書き方について。 以下のような数式をSheet1に書いています。 Sheet1のB
Excel(エクセル)
-
10
EXCEL マクロで 同じフォルダ内の複数ファイルの複数行全体を選択して1つのファイルに集約
Excel(エクセル)
-
11
エクセルカレンダーに予定表を反映したいです。
Excel(エクセル)
-
12
荷捌作業効率をあげるためのエクセル関数を教えてください。
Excel(エクセル)
-
13
エクセルでフィルタ後の列の重複を回避したい
Excel(エクセル)
-
14
エクセルの関数に関しての質問です。
Excel(エクセル)
-
15
EKCELで半角数字が入った文書を添付図のように逆さまにする方法を教えてください。
Excel(エクセル)
-
16
Excel
Excel(エクセル)
-
17
入所時間(A1)と退所時間(B1)をセル(C1)に片方だけ表示したい
Excel(エクセル)
-
18
処理年月が連続(指定年月~何ケ月間)している人のみ抽出をExcelのみで可能でしょうか
Excel(エクセル)
-
19
Excel 値を返す数式についてです
Excel(エクセル)
-
20
【EXCEL】=セル&セルが上手く表示できない。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
口の中に黒い血の塊
-
5
VLOOKUP関数を使用時、検索する...
-
6
値が入っているときだけ計算結...
-
7
母親がピロリ菌を持っていたの...
-
8
これって喉仏ですか? 私は女性...
-
9
背中の中心がたまに痛みます。...
-
10
精液の落とし方を教えてください
-
11
エクセルで値ではなく関数を参...
-
12
エクセル指定した範囲からラン...
-
13
テスターで断線を調べる方法教...
-
14
爪が紫色?
-
15
この赤い斑点は何でしょうか。 ...
-
16
2つの数値のうち、数値が小さい...
-
17
小数点以下を繰り上げたものを...
-
18
業務スーパーのコメ何種類か食...
-
19
検便についてです。 便は取れた...
-
20
採血後の内出血 先週の金曜日に...
おすすめ情報
公式facebook
公式twitter