Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12497 / 13645 ツリー ←次へ | 前へ→

【10200】オートフィルタで抽出した値の指定 ビギナー 04/1/11(日) 22:20 質問
【10201】Re:オートフィルタで抽出した値の指定 Jカーター 04/1/11(日) 22:28 回答
【10202】Re:オートフィルタで抽出した値の指定 ビギナー 04/1/11(日) 23:40 質問
【10203】Re:オートフィルタで抽出した値の指定 とまと 04/1/11(日) 23:48 回答
【10204】Re:オートフィルタで抽出した値の指定 ビギナー 04/1/12(月) 0:49 お礼
【10207】Re:オートフィルタで抽出した値の指定 Jカーター 04/1/12(月) 9:21 回答
【10217】Re:オートフィルタで抽出した値の指定 ビギナー 04/1/13(火) 0:15 お礼

【10200】オートフィルタで抽出した値の指定
質問  ビギナー E-MAIL  - 04/1/11(日) 22:20 -

引用なし
パスワード
   初心者です。教えていただきいことがあります。

マクロでオートフィルタにより値を抽出しましたが、その値についての平均値を取りたいのですが、どのようにすればよろしいでしょうか。

オートフィルタで抽出した値のみの選択方法がわかりません。

ご助言頂けたらありがたいです。

【10201】Re:オートフィルタで抽出した値の指定
回答  Jカーター  - 04/1/11(日) 22:28 -

引用なし
パスワード
   ▼ビギナー さん:
こんばんは。
SubTotal関数で第一引数を1にしてはどうでしょう?

VBAでもできますし
あらかじめセルに数式を書いておいてもいいと思います。

違ったらすいません。

【10202】Re:オートフィルタで抽出した値の指定
質問  ビギナー E-MAIL  - 04/1/11(日) 23:40 -

引用なし
パスワード
   ▼Jカーター さん:

返信ありがとうございます。
初心者なもので、全然VBAを理解しておりません。
教えてください。

>▼ビギナー さん:
>こんばんは。
>SubTotal関数で第一引数を1にしてはどうでしょう?

例えば、下記のような表の場合、1列について"r2"を抽出したとします。

  1  2  3
A r1  55 66
B r2  33 55
C
D r1  55 44
E r2  99 33

その場合VBAの記述とすればどういうふうにするべきなのでしょうか。
2列と3列それぞれ平均値を出したいのですが。
オートフィルタをかけた後に、

range(A2:E2).activate
activecell.SubTotal(1)

とすればB行とE行が選択されると言うことでしょうか。

>VBAでもできますし
>あらかじめセルに数式を書いておいてもいいと思います。

あらかじめセルに数式を書く場合、
AVERAGE(A2:E2)となってしまい、フィルタ抽出値の選択ができないのですが、どうしたらいいでしょうか。

変なこと言ってましたらすいません。
御助言おねがいします。

【10203】Re:オートフィルタで抽出した値の指定
回答  とまと  - 04/1/11(日) 23:48 -

引用なし
パスワード
   こんばんは
下記のようなレイアウトだとして
以下のようなコードでどうでしょうか?

  A   B
1果物   数量
2ミカン  3
3りんご  4
4ミカン  2
5とまと  6
6ミカン  1

Sub 平均()
Dim c As Range
Dim m As Long

 With Range("a1").CurrentRegion
     .AutoFilter 1, "ミカン"
    Set c = .Columns(2).SpecialCells(xlCellTypeVisible)
    MsgBox "ミカンの平均は" & Application.Average(c)
 End With

End Sub

【10204】Re:オートフィルタで抽出した値の指定
お礼  ビギナー E-MAIL  - 04/1/12(月) 0:49 -

引用なし
パスワード
   ▼とまと さん:

返信ありがとうございます。

SpecialCells(xlCellTypeVisible)

を使うと見えてるセルだけ選択できるんですね。
わかりました。

大変助かりました。ありがとうございました。
早速やってみます。

>こんばんは
>下記のようなレイアウトだとして
>以下のようなコードでどうでしょうか?
>
>  A   B
>1果物   数量
>2ミカン  3
>3りんご  4
>4ミカン  2
>5とまと  6
>6ミカン  1
>
>Sub 平均()
>Dim c As Range
>Dim m As Long
>
> With Range("a1").CurrentRegion
>     .AutoFilter 1, "ミカン"
>    Set c = .Columns(2).SpecialCells(xlCellTypeVisible)
>    MsgBox "ミカンの平均は" & Application.Average(c)
> End With
>
>End Sub

【10207】Re:オートフィルタで抽出した値の指定
回答  Jカーター  - 04/1/12(月) 9:21 -

引用なし
パスワード
   ▼ビギナー さん:
たとえばこんな表の場合で
----------------------------------------
'  名前  数    
' 1  1AA  1
' 2  2AA  2
' 3  3AA  3
' 4  4AA  4
' 5  1AA  5
' 6  2AA  6
' 7  3AA  7
' 8  4AA  8
' 9  1AA  4
'10  2AA  2

=SUBTOTAL(1,B2:B10)
としておけばフィルタをする度に計算結果が変わります。

VBAなら
-------------------------------------------------------------------
Sub test()
  With Sheets(1)
    .AutoFilterMode = False
    .Cells(1).AutoFilter 1, "1AA"
    MsgBox WorksheetFunction.Subtotal(1, .AutoFilter.Range.Columns(2))
  End With
End Sub
-------------------------------------------------------------------
Subtotal関数を「一般機能のヘルプ」で調べるとわかるの思いますが
平均の他に
Sum
Count
CountA
などいろいろな関数と同機能を実現できます、ぜひ覚えてください。

違ったらすいません。

【10217】Re:オートフィルタで抽出した値の指定
お礼  ビギナー E-MAIL  - 04/1/13(火) 0:15 -

引用なし
パスワード
   ▼Jカーター さん:
回答ありがとうございます。
subtotal関数、便利そうですね。
使ってマクロ作ってみます。
大変ありがとうございました。


>▼ビギナー さん:
>たとえばこんな表の場合で
>----------------------------------------
>'  名前  数    
>' 1  1AA  1
>' 2  2AA  2
>' 3  3AA  3
>' 4  4AA  4
>' 5  1AA  5
>' 6  2AA  6
>' 7  3AA  7
>' 8  4AA  8
>' 9  1AA  4
>'10  2AA  2
>
>=SUBTOTAL(1,B2:B10)
>としておけばフィルタをする度に計算結果が変わります。
>
>VBAなら
>-------------------------------------------------------------------
>Sub test()
>  With Sheets(1)
>    .AutoFilterMode = False
>    .Cells(1).AutoFilter 1, "1AA"
>    MsgBox WorksheetFunction.Subtotal(1, .AutoFilter.Range.Columns(2))
>  End With
>End Sub
>-------------------------------------------------------------------
>Subtotal関数を「一般機能のヘルプ」で調べるとわかるの思いますが
>平均の他に
>Sum
>Count
>CountA
>などいろいろな関数と同機能を実現できます、ぜひ覚えてください。
>
>違ったらすいません。

12497 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free