エクセル VBAに関する質問です。あるRange を指定して、その最大値、最小値を得る関数はなんでしょうか? ワークシート関数を使えばできるのですが、ブック、シートの移動があるので、避けたいです。

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2010/03/21 23:31:30
  • 終了:2010/03/22 09:16:19

回答(2件)

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692010/03/21 23:50:24

ポイント35pt

直接最大最小を求める関数は無いので、ループで求めることになるけど、

ワークシート関数をVBAから使えばご期待のことができると思いますよ。


Sub test2()
    Dim r As Range
    Set r = Range("A1:E3")
    '最大
    Debug.Print Application.WorksheetFunction.Max(r)
    '最小
    Debug.Print Application.WorksheetFunction.Min(r)
End Sub

http://q.hatena.ne.jp/

id:kaiketsu

この場合は、ブック、シートの移動は必要だと思うのですが、どうなんでしょうか? また、range の指定は、workbooks("aaa").sheet("bbb").range("C1:C300") みたいには書けないのでしょうか?

2010/03/22 00:04:15
id:p332 No.2

p332回答回数36ベストアンサー獲得回数32010/03/22 02:18:52

ポイント35pt

Rangeオブジェクトを取得する方法は、下記の通り何通りかあります。

1.番地で指定する

Set Rng = Range(Sheets(1).Cells(1,1), Sheets(1).Cells(1,1))

Set Rng = Sheets(1).Range("A1:A2")

2.名前で指定する(名前の定義は、Ctrl+F3からできます)

Set Rng = Sheets(1).Range("セル範囲の名前")

3.マウス等で選択している範囲

Set Rng = Selection

4.その他のさまざまなプロパティ、メソッド

Set Rng = Cells(1, 1).Find(・・・)

また、セルの親オブジェクトであるシートオブジェクトを指定しない場合は、アクティブなシートを指定したとみなされます。

VBAが実行される状況がよくわからないですが、3の方法で、VBAを実行する前に選択すれば問題なくセル範囲が習得できると思います。

セルの選択をしない場合は、セル範囲に名前を定義しておくと、シートを別のブックに移した時や、同一ブック内の別のシートに移した時でも、

同じ名前で異動先のセルを参照できます。

セルを取得した後は、結局ワークシート関数(Application.Function)を使うことになると思います。

名前の定義について:

http://home.att.ne.jp/zeta/gen/excel/c03p05.htm

  • id:SALINGER
    別ブックの場合でもシートの移動は必要ないですよ。
    ブックが開いていれば、前の回答みたいに別のブックのRangeを指定しても大丈夫です。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません