• ベストアンサー

VBAについて教えてください

最近、VBAの勉強を始めた初心者です。 下記の構文が機能しないのですが、何が間違っているのか教えていただけないでしょうか? ただ、選択の範囲の最大値を範囲指定したいだけなのですが・・・ 本を見ながらやっているのですが、さっぱりわかりません。 よろしくお願いいたします。 Sub Tas() Dim i As Integer For i = 3 To 10 Range(("AO" & i), ("AT" & i)).Find(WorksheetFunction.Max(Range(("AO" & i), ("AT" & i)))).Select Next i End Sub

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.7

> VBAを使わない方法でできるとありますが、是非その方法を教えていただけないでしょうか。 条件付き書式を使用する場合です。 AO3の条件付き書式を以下のようにして、AO3:AT10に書式をコピーしてみてください。 最大の条件:「数式が」「=(MAX($AO3:$AT3)=AO3)」 最小の条件:「数式が」「=(MIN($AO3:$AT3)=AO3)」 条件成立時の色は適当に……。

naccky
質問者

お礼

わざわざ教えていただきましてありがとうございました。 完璧でございます。 初歩的な質問に対して、最後まで教えていただきまして本当にありがとうございました。

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

その他の回答 (6)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.6

No.5です。 おかしいですね、こちらの環境ではちゃんと検索できます。 お使いのExcelのバージョンはいくつですか? それと、セルに入っている式の例をあげてみてもらえますか? また、最大値と最小値のセル色を変える一番簡単な方法はセルの条件付き書式だと思いますが、VBAで無ければ駄目ですか?

naccky
質問者

お礼

早速の解答ありがとうございます。 現在Excel2003を使っております。 セルには =('date'!B3-AVERAGE('date'!C3:BO3))/STDEVA('date'!C3:BO3) このような式が入っております。 特にVBAにこだわっているわけではありません。 ただ、行ごとに最大値、最小値を色付けするのはVBAでないとできないと勝手に思い込んでおりました。 VBAを使わない方法でできるとありますが、是非その方法を教えていただけないでしょうか。

すると、全ての回答が全文表示されます。
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.5

AO3:AT10には、セル式が入っているんですね? それでしたら、Findに引数が不足しています。 Range(("AO" & i), ("AT" & i)).Find(WorksheetFunction.Max(Range(("AO" & i), ("AT" & i)))).Select ↓ Range(("AO" & i), ("AT" & i)).Find(WorksheetFunction.Max(Range(("AO" & i), ("AT" & i))), , xlValues).Select

naccky
質問者

お礼

回答ありがとうございます。 上記の構文を試したところ、同じエラーメッセージが出てうまくいきませんでした。 初心者なもので本を片手に調べながらやっているのですが、本に書いてある以上のことは、理解するすべがないのが現状です。 もともと、それぞれの行の最大値と最小値に色付けしようと考えていたのですが、それ以前の最大値と最小値を選択するというところで行き詰まっております。 そこで、どなたかそれぞれの行の最大値と最小値に色付けするという構文に対する別のアイデアなり、方法なりを教えていただけないでしょうか。 Findの対象のセルに計算式が入っていると検索できず、教えていただいた方法でも検索できませんでしたもので、そもそもFindを使わない別の方法があるのではないかと考えた次第でございます。 よろしくお願いします。

すると、全ての回答が全文表示されます。
  • hotosys
  • ベストアンサー率67% (97/143)
回答No.4

エラーが出るのはFindで見つかるセルが無かった場合ではないでしょうか? 結果がNothingならSelectしないようにします。 Sub sample1() Dim i As Integer For i = 3 To 10 If Not Range(("AO" & i), ("AT" & i)).Find(WorksheetFunction.Max(Range(("AO" & i), ("AT" & i)))) Is Nothing Then Range(("AO" & i), ("AT" & i)).Find(WorksheetFunction.Max(Range(("AO" & i), ("AT" & i)))).Select End If Next i End Sub findを2回行っているのとRange(("AO" & i), ("AT" & i))は省略できるかっこがあるのと、これも2回なので変数にすると Sub sample3() Dim i As Integer Dim target As Range Dim maxCell As Range For i = 3 To 10 Set target = Range("AO" & i, "AT" & i) Set maxCell = target.find(WorksheetFunction.max(target)) If Not maxCell Is Nothing Then maxCell.Select End If Next i End Sub

naccky
質問者

お礼

回答ありがとうございます。 教えていただいた、上記の構文を実行したところ、どれも選択しませんでした。 そのため検討したのですが、選択しようとしているセルが、再計算しているセルなので、選択できなかったようなのです。 再計算しているセルを検索するにはどうしたらよいのでしょうか?

すると、全ての回答が全文表示されます。
  • tsaito
  • ベストアンサー率68% (17/25)
回答No.3

どのような結果を期待していますか? また実際どんな動きで期待通りでないと言っていますか? もし、AO3:AT10のなかで最大値を取得したいなら 単純に Range("AO3:AT10").Find(WorksheetFunction.Max(Range("AO3:AT10"))).Select となります。

naccky
質問者

補足

早速の回答ありがとうございます。 説明不足で失礼しました。 最終的にはそれぞれの行の最大値に色を付けていきたいと思っているのですが、その前に最大値の選択ができるか試してみたのです。 上記の構文を実行するとエラーメッセージが出て、 「オブジェクト変数またはWithブロック変数が設定されていません」 と出ます。 その意味が分からなかったのです。 失礼しました。

すると、全ての回答が全文表示されます。
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

機能しないとは? 3~10行目でA0~AT列の最大値を順にSelectすると思います。 マクロを走らせたあとは10行目の範囲内の最大値のところにあるでしょ? 早くて動きが目に見えてないだけじゃないですか。

すると、全ての回答が全文表示されます。
  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.1

Range("AO3:AT10").Find(WorksheetFunction.Max(Range("AO3:AT10"))).Select 範囲AO3:AT10の中の最大値のセルを選択するのが目的であればこれだけでできる筈ですが、やりたいことは違うのかな?

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

関連するQ&A