- ベストアンサー
マクロ:範囲内のセルを1つずつ編集する
EXCEL2003を使っています。 マクロは全くの初心者です。 VBはVB.NETを少しかじった程度です。 A1:A30に値1、B1:B30に値2が入力されています。 (1)B1の値がA1より大きい場合セルの背景色を青色に変更。 (2)B1の値がA1より小さい場合セルの背景色を赤色に変更。 (1)(2)の動作をB1からB30まで順番に行いたいのです。 条件付書式のやり方は分かります。 ですが条件付書式の場合単独のセルを指定する方法しか分かりません。 範囲内のセル全てに1つずつ条件付書式を適用するマクロを組みたいのです。 どなかた知恵を貸して下さい。 宜しくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
Sub TEST1() ActiveSheet.Range("B1:B30").Select With Selection .FormatConditions.Delete .FormatConditions.Add Type:=xlExpression, Formula1:="=$A1>$B1" .FormatConditions(1).Interior.ColorIndex = 3 .FormatConditions.Add Type:=xlExpression, Formula1:="=$A1<$B1" .FormatConditions(2).Interior.ColorIndex = 6 End With End Sub でしょうか?
その他の回答 (5)
- merlionXX
- ベストアンサー率48% (1930/4007)
#1のmerlionXXです。 sakasama0rskaさんにも参考になると思いますのでレスお借りします。 Wendy02さん、その通りで、実行時のアクティブセルの位置によってA1方式の場合、おかしなセル番地になってしまいます。 #1のコードで、わざわざ、ActiveSheet.Range("B1:B30").Select と、範囲選択しているのはまさにそれを防ぐためでした。 R1C1方式だと、#1のコードからSelectを外しても大丈夫でした。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 ちょっと、スレをお借りします。 merlionXX さんへ >R1C1方式にしないとだめでしたが どのようにダメどしたか? A1方式の場合は、おかしなセル番地が入ってしまったのではありませんか?もし、そうでしたら、理由は、アクティブセルの位置だと思います。R1C1方式ですと、誤動作はないのですが、A1方式の相対参照の数式は、擬似的な表示ですので、それで狂うのだと思います。もちろん、R1C1 のほうが、こういう場合は狂いが少ないですね。 たとえば、 With .Range("B1") .Select ・ ・ と入れてみたら、A1方式でも入力できるはずだと思っています。 間違っていたらすみません。
- merlionXX
- ベストアンサー率48% (1930/4007)
#1のmerlionXXです。 #3のWendy02さんがおっしゃるのは Sub TEST02() With ActiveSheet With .Range("B1") .FormatConditions.Delete .FormatConditions.Add Type:=xlExpression, Formula1:="=RC[-1]>RC" .FormatConditions(1).Interior.ColorIndex = 3 .FormatConditions.Add Type:=xlExpression, Formula1:="=RC[-1]<RC" .FormatConditions(2).Interior.ColorIndex = 6 .Copy End With .Range("B1:B30").PasteSpecial Paste:=xlFormats End With Application.CutCopyMode = False End Sub のような方法ですね。 これはいいですね。Selectしてなくとも正しくセルの位置を認識してくれますね。(R1C1方式にしないとだめでしたが)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >単独のセルを指定する方法しか分かりません。 私は、#2さんのように、最初に、セルの範囲を全部を選択するのではなくて、B1セルに、条件付書式を設定しておいて、後は、書式コピー(ほうきのアイコンがあればそれをクリック)で、B30にまでドラッグする方法を、いつも行っています。ただし、相対参照です。($のマークが入らないものです) B30 の条件付書式は、自動的に 条件1: =B30>A30 条件2: =A30>B30 となります。 条件付書式では、絶対参照($のついた座標)にすると、ひとつずつセルを設定しなければならなくなるのですね。
お礼
回答ありがとうございます。 お礼が遅くなってしまい申し訳ありません。 ずばり絶対参照で行っていてうまくいっていませんでした。 相対参照にする方法も分からなくて困っていました。 皆様方のおかげで無事理解することが出来ました。 マクロについても詳しく教えて頂きありがとうございました。 まだマクロについては理解出来てない部分があるのですが、勉強していきたいと思います。
- papayuka
- ベストアンサー率45% (1388/3066)
マクロを使わなくても B1:B30 を選択して、B1がアクティブな状態で条件付書式を 条件1 数式が =A1>B1 条件2 数式が =A1<B1 ってすれば B1:B30 全部に適用になりませんか? 意味が違うのかな??
お礼
回答ありがとう御座います。 時間がなくてお礼が遅くなって申し訳ありません。 数式を使えば簡単だったのですね。 その考えが今までなかったので大変勉強になりました。 ありがとうございました。
お礼
回答ありがとうございます。 理解に時間がかかりお礼が遅くなって申し訳ありません。 回答頂いたマクロで問題なく動作しました。 ありがとうございました。