ここから本文です

マクロ超初心者です。是非教えてください。マクロを使って、セルの色が1になった...

bqn********さん

2009/2/2320:42:01

マクロ超初心者です。是非教えてください。マクロを使って、セルの色が1になったら赤、2になったら水色、3になったら黄緑、4になったら黄色、5になったら紫、

それ以外は白に、自動的に変わるようにしたいのです。そしてそれはA列とL列だけで反応するようにしたいのです。また、入力は直接入力ではなく、A列とL列は別のセルを参照しています。いろいろ調べてみてもうまくいきません。A列とL列だけでなくすべてのセルで反応してしまったり、直接入力なら色が付くのに別のセルを参照している場合だと色が変わらないのです。何しろ、マクロはちんぷんかんぷんなので、コードをばっちり教えてくれるとありがたいです。よろしくお願いします。

閲覧数:
462
回答数:
3
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

hot********さん

編集あり2009/2/2401:01:37

こんなのではどうでしょうか?
シートのモジュール部にコピーしてください。
Private Sub Worksheet_Calculate()
Dim rng As Range
For Each rng In Application.Intersect(Range("A:A,L:L"), UsedRange)
If Left(rng.Formula, 1) = "=" Then
Select Case rng.Value
Case 1: rng.Interior.ColorIndex = 3 '赤
Case 2: rng.Interior.ColorIndex = 8 '水色
Case 3: rng.Interior.ColorIndex = 4 '黄緑
Case 4: rng.Interior.ColorIndex = 6 '黄色
Case 5: rng.Interior.ColorIndex = 7 '紫
Case Else: rng.Interior.ColorIndex = xlColorIndexNone 'なし
End Select
End If
Next
End Sub

[ 追加 ]
もしかしたら、こっちのほうがいいかも・・・
でもちょっと怪しい・・・
Private Sub Worksheet_Calculate()
Dim rng As Range
Dim firstAddress As String
With Application.Intersect(Range("A:A,L:L"), UsedRange)
Set rng = .Find("=", LookIn:=xlFormulas, lookat:=xlPart)
If Not rng Is Nothing Then
firstAddress = rng.Address
Do
If Left(rng.Formula, 1) = "=" Then
Select Case rng.Value
Case 1: rng.Interior.ColorIndex = 3 '赤
Case 2: rng.Interior.ColorIndex = 8 '水色
Case 3: rng.Interior.ColorIndex = 4 '黄緑
Case 4: rng.Interior.ColorIndex = 6 '黄色
Case 5: rng.Interior.ColorIndex = 7 '紫
Case Else: rng.Interior.ColorIndex = xlColorIndexNone 'なし
End Select
End If
Set rng = .FindNext(rng)
Loop While Not rng Is Nothing And rng.Address <> firstAddress
End If
End With
End Sub

質問した人からのコメント

2009/2/24 21:52:51

皆さんどうもありがとうございました。自分ももう少し勉強したいです。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

yas********さん

編集あり2009/2/2323:00:16

[VBA]~selectの復習と、色の定数の学習~

<質問の変更箇所>
>セルの色が1になったら赤
セルの値が1になったらセルの背景色を赤とする。

>水色~黄緑~
(定数が見当たらなかったので)青と緑とする。

<コード>
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng1 As Range
For Each rng1 In Target
If rng1.Column = 1 Or rng1.Column = 12 Then
With rng1.Interior
Select Case rng1.Value
Case Is = 1
.Color = vbRed
Case Is = 2
.Color = vbBlue
Case Is = 3
.Color = vbGreen
Case Is = 4
.Color = vbYellow
Case Is = 5
.Color = vbMagenta
Case Else
.Color = xlNone
End Select
End With
End If
Next
End Sub

<補足注意点>
>直接入力なら色が付くのに別のセルを参照している場合だと色が変わらない

計算の結果を返す時は、Changeイベントはトラップしません。
つまりA1セルに=B1+C1と数式が入力されていると仮定し、
B1セルに1を入力してもA1セルのセルの背景色は変わりません。

この場合はCalculateイベントを使うのかと思われます。

<蛇足>~思うがままに書く~
しかし、A列とL列全てをループするのは、効率的じゃないし
Findnextを使うか?それもちょっとね。。。
うーん。。。一工夫必要だなと思いました。整理がつかない…
この質問から離脱します。解決の一助になればこれ幸い。
もし、他に回答がつかなければ、Bookのデータをアップデートして、
URLを補足にて追記することをお勧めします。

素人提案なので、ご参考程度に検証:Excel2007

<蛇足の蛇足>
基本機能の"条件付き書式"を既知でExcel2003以前のverを使用している
という前提で回答しています。""内を知らない場合は、一度ご検索される
ことをお勧めします。

fuy********さん

2009/2/2321:52:45

>マクロはちんぷんかんぷんなので、コードをばっちり教えてくれるとありがたいです。

基礎くらいは自分で勉強しなさい。
シートのチェンジイベントとIF文だけで出来るんだから!

甘えた小僧には~~~
実行したらハードディスクをクラッシュさせるコードしこむぞコノヤロー(笑)




※ 最低限の知識がないとウィルス的なコードとの区別もつかないよね?

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる