プロが教えるわが家の防犯対策術!

Excelマクロの記述をもっとわかりやすくしたいのですが、どなたかご教示お願いします。
Excel2007使用。下記はマクロを記録として作成しました。省略できるものは省略して見やすくしたいのですが、どこを修正していいのか困っています。
範囲は「A2:A1000、B2:B1000」としていますが、「値が入っている範囲」としたい場合はどのように記述したらよいのでしょうか。
マクロ現在勉強中です。よろしくお願いいたします。

Sub CHK()
Range("A2:A1000").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=COUNTIF($B$2:$B$1000,A2)>0"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent2
.TintAndShade = 0.599963377788629
End With
Selection.FormatConditions(1).StopIfTrue = False

Range("B2:B1000").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=COUNTIF($A$2:$A$1000,B2)>0"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent2
.TintAndShade = 0.599963377788629
End With
Selection.FormatConditions(1).StopIfTrue = False
End Sub

A 回答 (3件)

条件付書式の設定をVBAで実行されていると思いますが


AにB列に同じ値があれば、色をつける と云ったことでしょうか。
これを実行するたびに条件付書式が追加されていきますよね。
条件付書式の設定には限りがありますので
何度も実行するうちに エラーが出るはずです。

この様な操作をわざわざVBAで実行する必要があるのかという疑問に駆られます。

A列全体を選択して
条件付書式 数式が =COUNTIF(B:B,A1)>0
とA列全体に条件付書式を一度設定してしまえばデータが増えても大丈夫ではないでしょうか?
B列も同様です。

VBAの勉強という意味で
Range("A2:A1000").Select
を Range("A2:A" & Range("A2").End(xlDown).Row).Select
とかでデータが入っている最後の行番号が取得できます。

"=COUNTIF($B$2:$B$1000,A2)>0"
なども同様ですね
"=COUNTIF($B$2:$B$" & Range("A2").End(xlDown).Row & ",A2)>0"
但しこの場合、お勧めはしませんが。
VBAを使う目的があれば質問していただいたほうがより良い回答が得られると思います。
    • good
    • 0
この回答へのお礼

助言ありがとうございました。VBAを使う目的は、週毎にデータが約200行ずつ増えていくため「マクロで作成したほうが手間を省くことができる」と考えた次第です。

お礼日時:2010/09/13 22:40

>省略できるものは省略して見やすくしたいのですが、どこを修正していいのか困っています


今の所、きちんと動いているのでしたら、もう考えないほうがよいですね。しょせん、記録マクロは、VBAプログラミング・コードは違ってきてしまうものです。それは、直したところで、以下の程度にしかなりません。見やすくっていっても、読めないのは実力不足だと思ったほうがよいと思います。(ただし、意味が分かる・分からないは別問題)それと、凝った色をつけるという目的がなければ、もう少し、コードは簡単になるはずです。サンプルコードを使ったほうがよいと思います。

ただ、Selection をなくすということは、R1C1型にしなければならないという問題が発生してしまいます。
それから、条件付き書式は、数式は、= COUNTIF(A:A,B2)でもよいのですが、範囲は、限定させたほうがよいです。そうしない、ファイルの巨大化を招きかねません。

以下、実際には、マクロは試しておりません。

'//
Sub CHKr()
 Dim rc As Variant
 With Range("A2", Cells(Rows.Count, 1).End(xlUp))
  For Each fc In .FormatConditions
   fc.Delete
  Next
  .FormatConditions.Add Type:=xlExpression, _
  Formula1:="=COUNTIF(" & .Offset(, 1).Address(1, 1, xlR1C1) & ",RC)>0"
  .FormatConditions(.FormatConditions.Count).SetFirstPriority
  With .FormatConditions(1).Interior
   .PatternColorIndex = xlAutomatic
   .ThemeColor = xlThemeColorAccent2
   .TintAndShade = 0.599963377788629
  End With
  .FormatConditions(1).StopIfTrue = False
  
  .FormatConditions.Add Type:=xlExpression, _
  Formula1:="=COUNTIF(" & .Address(1, 1, xlR1C1) & ",RC[1])>0"
  .FormatConditions(.FormatConditions.Count).SetFirstPriority
  With .FormatConditions(1).Interior
   .PatternColorIndex = xlAutomatic
   .ThemeColor = xlThemeColorAccent2
   .TintAndShade = 0.599963377788629
  End With
  .FormatConditions(1).StopIfTrue = False
 End With
End Sub
 
    • good
    • 0
この回答へのお礼

助言ありがとうございました。下手にいじって作動しなくなると困るので、現状使用します。

お礼日時:2010/09/13 22:26

その前に、質問をもっとわかりやすくしよう!



ナニをしたいコードなのかが書いてない!
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!