• ベストアンサー

Excelのマクロ 指定した範囲のセルの処理方法

Excel2000のマクロを使って以下のマクロを作っています。 ■指定した範囲のセルの値が80以上だったら色をつける そこで質問なのですが、 range("","").select でセルの範囲を指定して、そこから選択したセルだけを対象に処理を実行するにはどうしたらいいのか方法がわかりません。どうすればいいでしょうか? どなたかご解答よろしくお願いします。

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

  • ベストアンサー
  • izmlz
  • ベストアンサー率55% (67/120)
回答No.3

↓は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)
回答No.6

選択しているオブジェクトは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

bitter140307
質問者

お礼

ありがごうございます。回答を頂いた皆様、ありがとうございます。

  • kiki_s
  • ベストアンサー率59% (147/248)
回答No.5

>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)
回答No.4

> Excel実行中にマウスで指定した範囲として処理をしたい 今ひとつ状況が分かりませんが、予め範囲を指定してからマクロを実行ということであれば Range("A1:A10")などののかわりに Selection を利用します。 For Each C in Selection Debug.Print C.Value Next とすると現在選択されている範囲内のセルを一つずつ取り出し、イミディエイトウィンドウにセルに入力されている値を出力します。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

Dim r As Range Set r = Application.InputBox("セル範囲指定", Type:=8) MsgBox r.Address 例えばですけどInputBox メソッドの例

  • izmlz
  • ベストアンサー率55% (67/120)
回答No.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   End If  Next End Sub

参考URL:
http://www2.odn.ne.jp/excel/waza/cformat.html
bitter140307
質問者

補足

ご解答ありがとうございます。 ひとつお聞きしたいのですが、たとえばマクロであらかじめ範囲をしているのではなく、Excel実行中にマウスで指定した範囲として処理をしたい場合はどうしたらいいのでしょうか?よろしければご解答お願い致します。 また、 For Each c In Rng とはどんな感じの処理なのでしょうか?