- ベストアンサー
Excelのマクロ 指定した範囲のセルの処理方法
Excel2000のマクロを使って以下のマクロを作っています。 ■指定した範囲のセルの値が80以上だったら色をつける そこで質問なのですが、 range("","").select でセルの範囲を指定して、そこから選択したセルだけを対象に処理を実行するにはどうしたらいいのか方法がわかりません。どうすればいいでしょうか? どなたかご解答よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
↓はANo.1の改良版です。 Sub test() Dim Rng As Range Dim c As Range Set Rng = Range("B2:D10") 'セルの範囲を指定 For Each c In Rng If c.Value >= 80 Then c.Interior.ColorIndex = 20 Else c.Interior.ColorIndex = xlColorIndexNone End If Next End Sub >実行中にマウスで指定した範囲として処理をしたい場合 ↓のようになります。 Sub test2() Dim Rng As Range Dim c As Range On Error Resume Next Set Rng = Application.InputBox("範囲を指定してください", Type:=8) On Error GoTo 0 If Rng Is Nothing Then Exit Sub For Each c In Rng If c.Value >= 80 Then c.Interior.ColorIndex = 20 Else c.Interior.ColorIndex = xlColorIndexNone End If Next End Sub >For Each c In Rng >とはどんな感じの処理なのでしょうか? セル範囲(Rng、すなわちRange("B2:D10") )内のセルすべてについて処理を行う、といった感じです。
その他の回答 (5)
- zap35
- ベストアンサー率44% (1383/3079)
選択しているオブジェクトはSelectionでよいのですが、不特定の方にマクロを使わせることがあるなら、選択しているのがセルかどうか。セルの値が数値かどうかまでチェックした方がいいですよ。 こんな感じになります Sub Macro1() Dim r As Range If TypeName(Selection) = "Range" Then For Each r In Selection If IsNumeric(r.Value) Then If r.Value >= 80 Then r.Interior.ColorIndex = 35 End If End If Next r End If End Sub
- kiki_s
- ベストアンサー率59% (147/248)
>Excel実行中にマウスで指定した範囲として処理をしたい・・・ Selection.Addressで取得出来ます。 Hani = Selection.Address ただし、絶対参照で返って来ます。 A1からB10が選択されていると、Hani =「$A$1:$B$10」 ただ、この関数は律儀なところがあり、 マウスでセルを範囲する時、上から下と下から上で参照値が変わります。 A1からB10で「$A$1:$B$10」 B10からA1で「$B$10:$A$1」 つまり、選択した順番で返って来ます。 もちろん離れた複数セルの取得もできます。 私事ですが、離れた複数セルの処理で苦労しました。 結局、ものすごい力業で処理しています(^^;; >For Each c In Rng まぁ、すでに回答は出ていますが、 Rngを配列の要素としてステートメントを実行します。
- Masa2072
- ベストアンサー率51% (94/182)
> Excel実行中にマウスで指定した範囲として処理をしたい 今ひとつ状況が分かりませんが、予め範囲を指定してからマクロを実行ということであれば Range("A1:A10")などののかわりに Selection を利用します。 For Each C in Selection Debug.Print C.Value Next とすると現在選択されている範囲内のセルを一つずつ取り出し、イミディエイトウィンドウにセルに入力されている値を出力します。
- n-jun
- ベストアンサー率33% (959/2873)
Dim r As Range Set r = Application.InputBox("セル範囲指定", Type:=8) MsgBox r.Address 例えばですけどInputBox メソッドの例
- izmlz
- ベストアンサー率55% (67/120)
条件付き書式で実現可能なことですが、マクロでということでしたら、↓のようになるかと思います。 Sub test() Dim Rng As Range Dim c As Range Set Rng = Range("B2:D10") 'セルの範囲を指定 For Each c In Rng If c.Value >= 80 Then c.Interior.ColorIndex = 20 End If Next End Sub
補足
ご解答ありがとうございます。 ひとつお聞きしたいのですが、たとえばマクロであらかじめ範囲をしているのではなく、Excel実行中にマウスで指定した範囲として処理をしたい場合はどうしたらいいのでしょうか?よろしければご解答お願い致します。 また、 For Each c In Rng とはどんな感じの処理なのでしょうか?
お礼
ありがごうございます。回答を頂いた皆様、ありがとうございます。