• ベストアンサー

マクロ:セルの範囲指定

エクセルマクロで困っています。 セルの範囲指定をしようとしています。 初心者過ぎて、よくわかりません。 現在のマクロ↓ Sub 済() If ActiveCell.Column = 21 Then Selection.FormatConditions.Delete '条件付き書式削除 With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With '色変え判定セル書き換え ActiveCell.Offset(0, 5).Select ActiveCell.FormulaR1C1 = "77" ActiveCell.Offset(0, -5).Select Else answer = MsgBox("U列を選択して下さい", vbCritical) End If End Sub やりたい事は、下記の通りです。 列Uがアクティブの時にU~ACの行を塗りつぶし。 列は変動します。 今は、やり方がよく分からなかったため オフセットで一つ一つ塗りつぶしてます。 マクロを組みすぎてファイルが重くなって困っています。 回答よろしくお願いいたします。

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

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

まとめてみました Sub 済1() Dim answer If ActiveCell.Column = 21 Then Selection.FormatConditions.Delete '条件付き書式削除 With Selection.Resize(, 9).Interior .ColorIndex = 16 .Pattern = xlSolid End With '色変え判定セル書き換え ActiveCell.Offset(, 13).FormulaR1C1 = "77" ActiveCell.Offset(, 8).Select Else answer = MsgBox("U列を選択して下さい", vbCritical) End If End Sub

nqd03
質問者

お礼

お手数をお掛けしました。 質問内容が分かりにくかったですね。 申し訳ありません。。

その他の回答 (2)

  • Yosha
  • ベストアンサー率59% (172/287)
回答No.2

何をしたいか全体像が見えないので、とりあえず提示された コードと同じ結果が得れるコードを書きます。 Sub test()  Dim r As Long, c As Integer, answer  r = Selection.Row  c = Selection.Column  If c = 21 Then   With Range(Cells(r, c), Cells(r, c + 8)).Interior    .ColorIndex = 16    .Pattern = xlSolid   End With   '色変え判定セル書き換え   Cells(r, c + 13).Value = "77"   Cells(r, c + 8).Select  Else   answer = MsgBox("U列を選択して下さい", vbCritical)  End If End Sub 以上ですが、繰り返しのところの範囲を一括して選択すればOKです。 他にしたいことがあればコメントしてください。

nqd03
質問者

お礼

ありがとうございます。 やっぱり分かりにくかったですか。。 さっき試してみましたができました! 大変、勉強になりました。 ありがとうございました。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>列は変動します。 どのように変動するのでしょうか? 書かれたマクロではよく解りませんが・・・。 「色替え判定」の部分は解りませんが、下記でいかがでしょうか? セルが決まっているなら、「済2」の方が解りやすいでしょう。 Sub 済() If ActiveCell.Column = 21 Then Selection.FormatConditions.Delete '条件付き書式削除 For i = 21 To 29 ActiveSheet.Columns(i).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With Next '色変え判定セル書き換え ActiveCell.Offset(0, 5).Select ActiveCell = "77" ActiveCell.Offset(0, -5).Select Else answer = MsgBox("U列を選択して下さい", vbCritical) End If End Sub Sub 済2() If ActiveCell.Column = 21 Then Selection.FormatConditions.Delete '条件付き書式削除 ActiveSheet.Columns("U:AC").Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With '色変え判定セル書き換え Range("AH1") = "77" Range("AC1").Select Else answer = MsgBox("U列を選択して下さい", vbCritical) End If End Sub

nqd03
質問者

お礼

すいません。 列が変動というのは・・ U列の中でアクティブセルが変動するって事です。 アクティブセルを含む、U~ACを塗りつぶしで・・ U1がアクティブで実行した場合は・・ (U1:AU1)としたかったのです。。