• ベストアンサー

excelのセルの色を変える

excel2000でsheet1にある列のうち たとえば sheet1のセルA1の値が「Z-1」だったら sheet2のセルB1を赤に塗りつぶす ってことはマクロでできますか? できなければVBAでどのようなコードになるのか教えていただけませんでしょうか?

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

  • ベストアンサー
  • moon00
  • ベストアンサー率44% (315/712)
回答No.7

うーん、何かやりたいことがよく分からなくなってきたのですが。 要点を整理すると、 ・Sheet1のある範囲に値が入っている ・その範囲内に特定の値があればSheet2のB1セルに色を付けたい ・B1セルには何か表示したい文字が入っている ということでしょうか? それなら、下の条件付き書式をこう変更して下さい。 A2セルを追加で使用します。 Sheet2で 1.A1に探したい値を入れる 2.「A2」に以下の式を書く =COUNTIF(Sheet1!J2:J20,A1)  A1の内容と一致するセルをSheet1のJ2:J20から探し、その数をカウントします。 3.セルB1で条件付き書式  条件1 数式が=A2>0、塗りつぶし赤 こうすればB1のセルには自由に書き込めます。 余談ですが、参照範囲が同じシートにあれば、 条件付き書式にA2セルの内容をそのまま書き込むことで可能です。

Hugh
質問者

お礼

おかげさまで私のやりたいことが完璧にできました。 どうもありがとうございました。 大変感謝いたします。 本当にありがとうございました

その他の回答 (6)

  • moon00
  • ベストアンサー率44% (315/712)
回答No.6

基本的なことなんですけど、(これだけマクロ書いてて言うのもなんですが) マクロでする必要がある作業ですか? 他の回答でも書かれていますが、条件付き書式でクリアできそうな気もします。 下のマクロでも探したい値を別のセルに入れましたが、 それができるなら条件付き書式でも可能です。 Sheet2で 1.A1に探したい値を入れる 2.B1に以下の式を書く =COUNTIF(Sheet1!J2:J20,A1)  A1の内容と一致するセルをSheet1のJ2:J20から探し、その数をカウントします。  つまり一致するセルがあれば数式の答えは1以上、なければ0です。 3.条件付き書式で  条件1 セルの値が次の値に等しくない =1、フォント赤、塗りつぶし赤  条件2 セルの値が次の値に等しい =0 フォント白(見えなくする) これでどうですか? この方が範囲の変更は簡単ですよ。

Hugh
質問者

補足

ありがとうございました。 教えていただいた方法でできましたが、色を塗りつぶすセルには値がはいっていたのが消えてしまいますよね? これってテキストボックスとかを貼り付けないと値は入力できないですか? 要するにセルの色を変えるセルに文字を入れてある状態で色だけをかえたいのです。そして一致しなくなれば自動的にセルの色をなしにしたいのです。

  • moon00
  • ベストアンサー率44% (315/712)
回答No.5

補足読みました。 その前に、前の回答で書いたコードで最後に「END SUB」が抜けてましたね。 すいません。 まず全角の「Z-1」としたいということですが、 「"」(ダブルクオーテーション)でくくった中なら、全角で入るはずです。 "Z-1"となっているか、確認して下さい。 それと、比較する値の入る場所がA1固定ではなく、J2:J20ということですが、 この場合は、J2からJ20までの値を1回ずつ取り出して比較することになりますので、 ちょっと変わります。 Sub Macro2() Dim Naiyo As String Dim Hikaku As String Dim i As Integer Dim j As Integer Hikaku = Range("A1") 'セルA1の内容を取得 j = 0 For i = 2 To 20 '繰り返し処理 範囲はJ2:J20 Sheets("Sheet1").Select 'Sheet1をアクティブに Naiyo = Cells(i, 10) 'セルJ2の内容を取得 Jは10列目 If Naiyo = Hikaku Then 'セル内容を判定 j = j + 1 'セル内容が一致するセル数をカウント End If Next If j > 0 Then 'セル内容が一致するセルがある場合 Sheets("Sheet2").Select 'Sheet2をアクティブに Range("B1").Select '塗りつぶすセルを選択 With Selection.Interior .ColorIndex = 3 '一致していたら赤く塗る End With Else Range("B1").Select With Selection.Interior .ColorIndex = xlNone '一致していなければ塗りつぶしなし End With End If End Sub 比較する値が流動的ということなので、探したい値をSheet1のA1セルに入れる ことにしています。 探したい値に何か規則があれば、それを利用することができるかもしれません。 これでやりたい方向は合ってますかね? 実は私もマクロ最近やり始めたところなんで、コードきれいじゃなくてすいません。

  • mam_00
  • ベストアンサー率50% (5/10)
回答No.4

こんばんは。mixjuice様のおっしゃるとおり、「書式」から「条件付書式」がもっとも簡単だと思います。いくつか制約はありますが。 sheet2のセルB1に =Sheet1!A1 として、セルB1にA1の値と等しくなるようにします。 sheet2のセルB1を選択し、「書式」から「条件付書式」をクリックします。 条件に、 「セルの値が」 「次の値に等しい」 「="Z-1"」 とします。 [書式]ボタンをクリックして、[パターン]タブ内の色を 赤 など任意の色にします。 そうすると、Sheet1のA1が Z-1 の値の時は、Sheet2の B1 セルが真っ赤になります。

  • mixjuice
  • ベストアンサー率14% (8/54)
回答No.3

メニューバーの「ツール」から「条件付書式」ではどうでしょう。

  • moon00
  • ベストアンサー率44% (315/712)
回答No.2

あんまりきれいなコードではありませんが。 Sub Macro1() Dim Naiyo As String Sheets("Sheet1").Select 'Sheet1をアクティブに Naiyo = Range("A1") 'セルA1の内容を取得 Sheets("Sheet2").Select 'Sheet2をアクティブに If Naiyo = "Z-1" Then 'Sheet1のセル内容を判定  Range("b1").Select With Selection.Interior .ColorIndex = 3 '一致していたら赤く塗る End With Else  Range("B1").Select With Selection.Interior .ColorIndex = xlNone '一致していなければ塗りつぶしなし End With End If このような感じでしょうか。 このマクロを実行するとお望みの作業ができると思います。 条件付き書式でも工夫すればできると思います。 条件に他シートからの参照は出来ませんが sheet2のB1セルに「=sheet1!A1」としておいて 条件1 セルの値が次の値に等しい ="Z-1"、フォント赤、塗りつぶし赤 条件2 セルの値が次の値に等しくない ="Z-1" フォント白(見えなくする) 少しはお役に立てましたか?

Hugh
質問者

補足

ありがとうございました。少し状況が変わってしまいました。Z-1の値が特定のセルではなく、J2:J120の間にZ-1とかA-1とかC-1とか値もセルも流動的な場合は(”A-1")のところをrange("J2:J120")にすればいいのでしょうか? またsheet1にあるセルの値も全角の「Z-1」なのですが、コードを書く時に自動的に半角になってしまいます。 どうすれば全角として認識されるのでしょうか? 入れ違いになって申し訳ありませんが宜しくお願い致します。

  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.1

質問の例の回答なら、以下のとおりで可能。 Sub TEST()   If ActiveWorkbook.Sheets("Sheet1").Range("A1") = "Z-1" Then     Sheets("Sheet2").Select     Range("B1").Select     With Selection.Interior       .ColorIndex = 3       .Pattern = xlSolid     End With   End If End Sub

関連するQ&A