Excel VBA質問箱 IV

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

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


13952 / 76734 ←次へ | 前へ→

【68282】Re:指定した項目の最大値を求めたいのですが
発言  kanabun  - 11/2/20(日) 15:56 -

引用なし
パスワード
   ▼江々 さん:
>   MsgBox "最大値は" & WorksheetFunction.Subtotal(4, Intersect(.Cells, .Offset(1, 1)))
>のintersectのところは範囲を示していると思いますが、どのような意味なのでしょうか?    

Intersect メソッドは、ある範囲とある範囲の重なる範囲を
求めるときに使います。

今 ある範囲rを
 Set r = Range("A1").CurrentRegion
として指定したとき r.Address[A1:D8]が得られたとしますと、
  A B C D
1 □□□□
2 □□□□
3 □□□□
4 □□□□
5 □□□□
6 □□□□
7 □□□□
8 □□□□

元の範囲とその範囲を
下へ一行シフトした範囲が重なるセル範囲は
  A B C D
1 □□□□
2 ■■■■
3 ■■■■
4 ■■■■
5 ■■■■
6 ■■■■
7 ■■■■
8 ■■■■
9 □□□□
Intersect(r, r.Offset(1))
で求めることができ、具体的には[A2:D8]がその範囲です。

元の範囲とその範囲を右へ1列シフトした範囲とが重なるセル範囲は
  A B C D E
1 □■■■□
2 □■■■□
3 □■■■□
4 □■■■□
5 □■■■□
6 □■■■□
7 □■■■□
8 □■■■□
Intersect(r, r.Offset(,1))
で求めることができ、具体的にはその範囲は[B1:D8]です。
いずれのばあいも、求まるセルの最終セルは元のセル範囲の
最終セル[D8]であることにご留意ください。

さて、今回は1行目と1列目の両方を除外した範囲をSubTotalの対象と
したいのですから、これまでの例を応用して、

 Set r = Range("A1").CurrentRegion のとき
求めたい範囲(最大値を検索する範囲)は
 Intersect(r, r.Offset(1, 1)))

とすればよいことになります。
  A B C D E
1 □□□□□
2 □■■■□
3 □■■■□
4 □■■■□
5 □■■■□
6 □■■■□
7 □■■■□
8 □■■■□
9 □□□□□

[B2:D8]が求まります。
このばあいも最終セルは[D8]です。

SubTotal関数は[B2:D8]セル範囲の可視セルだけを対象に
第1引数に応じた統計処理結果を返してくれます。
1:AVG 2:COUNT 3:CountA 4:MAX 5:MIN 9:SUM などなど。
2 hits

【68277】指定した項目の最大値を求めたいのですが 江々 11/2/20(日) 9:09 質問
【68278】Re:指定した項目の最大値を求めたいのですが kanabun 11/2/20(日) 9:44 発言
【68280】Re:指定した項目の最大値を求めたいのですが 江々 11/2/20(日) 10:00 質問
【68282】Re:指定した項目の最大値を求めたいのですが kanabun 11/2/20(日) 15:56 発言
【68285】Re:指定した項目の最大値を求めたいのですが 江々 11/2/20(日) 17:18 お礼

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