重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

 エクセル2003で条件付き書式での色付けを5つ以上設定したいのですが、VBAで対応するしか
ないということでした。
A1:A10に”あ”~”お”をランダムに入力したとして、A1:A10をC1:C10に参照して、このC列に反映された文字に色付けしたいのですが、いろいろVBAでの条件付き書式を探してみたんですが、入力したセルの色付けはできても参照したセルの色付けができませんでした。可能かどうかも分かりませんが、できる方がいたらよろしくお願いします。

A 回答 (5件)

No.3です!


前回は外していたみていでごめんなさい。

結局↓のような感じで良いのですかね?

今回も前回と同様の方法になってしまいますが・・・

G列を色見本用の列として使用しています。
E~F列のデータが増えても対応できるようにしています。
(当方使用のExcel2003ではカラーインデックスは56色使用できたと思いますが、
白・黒等がありますので、実際使用できる色の数は少なくなります)
G列のセルは、F列の値の場合につけたい色に塗りつぶしておいてください。

画面の左下に「Sheet1」・「Sheet2」・・・となっているSheet見出し上で右クリック
→ コードの表示 → ↓のコードをコピー&ペーストしてみてください。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Columns(3).Interior.ColorIndex = xlNone
Dim i, j As Long
For i = 1 To Cells(Rows.Count, 3).End(xlUp).Row
For j = 1 To Cells(Rows.Count, 6).End(xlUp).Row
If Cells(i, 3) = Cells(j, 6) Then
Cells(i, 3).Interior.ColorIndex = Cells(j, 7).Interior.ColorIndex
End If
Next j
Next i
End Sub

尚、エラーになりますとマクロが中止してしまいますので、
関数等でエラーを表示させないようにしておきます。

これでデータが変わるたびにマクロが実行されますので、
希望に近い形にならないでしょうか?

実際は1行目はタイトル行になっていて2行目以降にデータがあると思いますので、
その場合はコード内の「1」の部分が行番号になります。
そこを変更すれば対応できます。

以上、今回も外していたらごめんなさいね。m(__)m

この回答への補足

 す、すごいですね!!VBAを覚えたらこんなことまでできるんですね。
自分がしたかった事よりこうやって色見本があると分かりやすく助かりました。
ただ、僕の質問は例だったので、実際は色付けしたい範囲は横にももっと広いんです。
今回、行の変更は教えて頂いたんですが、列の範囲も指定できますか?
(B1:H10)みたいに自分で変更できるのでしょうか?
何回も申し訳ないので、とりあえず解決ということでもう一度質問しますので、見かけたら
よろしくお願いします。

補足日時:2010/10/27 13:56
    • good
    • 0

No.4です!


たびたびごめんなさい。

前回画像の添付を忘れていました。
画像を貼り付けておきます。m(__)m
「 エクセル2003で条件付き書式での色付」の回答画像5
    • good
    • 0

こんばんは!


実は昨日投稿しようと思っていたのですが、
質問の内容がイマイチ把握できなかったので差し控えていました。

今日もまだはっきりつかめていませんけど、
投稿してみます。

こんなことをご希望なのでしょうか?
↓の画像でSheet2に文字列の隣の列につけたい色を色見本として、表示しておきます。
Sheet1のすべてのデータを対象にしてみました。

Altキーを押しながらF11キーを押してみてください。
白い画面が出ますので、↓のコードをコピー&ペーストしてマクロを実行してみてください。

Sub test()
Dim i, j, k As Long
Dim ws1, ws2 As Worksheet
Set ws1 = Worksheets("sheet1")
Set ws2 = Worksheets("sheet2")
For i = 1 To ws1.UsedRange.Rows.Count
For j = 1 To ws1.UsedRange.Columns.Count
If WorksheetFunction.CountIf(ws2.Range("A:A"), ws1.Cells(i, j)) Then
k = WorksheetFunction.Match(ws1.Cells(i, j), ws2.Range("A:A"), False)
ws1.Cells(i, j).Interior.ColorIndex = _
ws2.Cells(k, 2).Interior.ColorIndex
End If
Next j
Next i
End Sub

これでSheet1でSheet2のA列に一致するものにB列の色が表示されると思います。
以上、参考になれば良いのですが、
的外れならごめんなさいね。m(__)m
「 エクセル2003で条件付き書式での色付」の回答画像3

この回答への補足

 こんなに丁寧にありがとうございます。
自分の説明ベタに付き合ってくれて感謝します。
No2さんに補足させてもらいました。よかったら見てみてもらえますか?
また意味が分からなかったらスミマセン・・・・・。

補足日時:2010/10/27 06:35
    • good
    • 0

#1です。

良く分かりません。

 A   B   C   D   E    F
1 い      B      あ    A
2               い    B
3               う    C

の様な配置だとして、C1に、
=VLOOKUP(A1,$E$1:$F$3,2,FALSE)
といった式が入っている時、
A1の値に応じてC1の文字色を変えたいというご趣旨なら、
#1の2番目のコードで(実用上は1番目のコードでも)良いと思いますが、
そうでなければ、上記の様な例または、画像で補足してください。

なお、#1-2のコードで、参照しているセルが存在しないとエラーで止まってしまうので
Set myRange = Target.Dependentsのところを、下記の通り変更して下さい。
On Error Resume Next
Set myRange = Target.Dependents
If myRange Is Nothing Then
'該当セルなし
Exit Sub
End If
On Error GoTo 0

この回答への補足

 本当に何回もすみません。
ただ条件付き書式で色付けをしたいだけなんです・・・・。

  A B C D  E F
1 あ 1   1    い 3
2 い 3  3    あ 1

C1に=vlookup(A1,$E$1:$F2,2,false)
というような式が入っていたとして、これをC列に複数コピーしてあります。そこでC列のセルを1だったら赤、3だったら青に塗りつぶすようにしたいんです・・・・・。
・・・・・といいますか、このシート内のすべての1や3を色付けしてもいいんです。
ただ、いままで見つけてきたVBAでの条件付き書式が、このC列のように他から参照してきた場合、色付けしてくれなくて・・・・・。範囲はシート全体でもいいので、色付けの条件(文字)を5つ以上設定できるようにして欲しいんです。
本当にわがまま言ってすみません。
見捨てないでください!!

補足日時:2010/10/27 06:30
    • good
    • 0

なさりたい事は次のどちらでしょうか?


1.A1:A10のセルのどれかに、”あ”~”お”のいずれかが入力されたとき、その文字に応じて、2つ離れたセルのフォントの色を変える。
2.A1:A10のセルのどれかに、”あ”~”お”のいずれかが入力されたとき、そのセルを参照しているセルのフォントの色を変える。
※入力されたのがA1なら、A1に対応したセルを対象とする。(A2~A10については対象としない)事が前提
どちらでも無ければ、補足してください。

1のコード
(こちらで十分ではないかと思いつつ)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myRange As Range, myCell As Range, myArea As Range

If Target.Cells.Count > 1 Then Exit Sub
If Intersect(Target, Range("A1:A10")) Is Nothing Then Exit Sub
Select Case Target.Value
Case "あ"
Target.Offset(0, 2).Font.ColorIndex = 3
Case "い"
Target.Offset(0, 2).Font.ColorIndex = 4
'....
End Select
End Sub

2のコード
(補欠なので、検証は不十分です)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myRange As Range, myCell As Range, myArea As Range
Dim myColorIndex As Long

If Target.Cells.Count > 1 Then Exit Sub
If Intersect(Target, Range("A1:A10")) Is Nothing Then Exit Sub
Select Case Target.Value
Case "あ"
myColorIndex = 3
Case "い"
myColorIndex = 4
'......
End Select
'直接参照だけにしたければDirectDependentsに変更
Set myRange = Target.Dependents
For Each myArea In myRange.Areas
For Each myCell In myArea.Cells
myCell.Font.ColorIndex = myColorIndex
Next myCell
Next myArea
End Sub

この回答への補足

さっそくの回答ありがとうございます!!
分かりやすくするつもりが逆効果でした・・・・。
もう一度、お願いできますか??
ひとつのシート内に複数の文字列がありまして、これらはすべて=VLOOKUPで参照されています。
これらを条件付き書式で色付けしたいんです!!頻繁にセルの内容が変更されるので、分かりやすく色付けをして決められた文字列に反応してもらいたいんですが、難しいでしょうか?よろしくお願いします。

補足日時:2010/10/26 02:20
    • good
    • 0

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