こんばんは。どうやら一般処理では、ご満足いただけないようですね。
私は、#4 さんまでの話で、設定でほぼ問題が解決したかのように思えました。
しかし、もう、VBAで処理したほうが手っ取り早いような気がします。
>(例)
>あるセルで、"×××(A2,赤)"としたら、A2のセルを赤くできる。
この×××と、() が、何を意味するのかわかりませんが、
まず、Setting_Button で、ボタンを設定してください。ボタンの設定場所に、以下では、Sheet1 に、J1セルが設定されるようになっていますから、任意で、その部分を書き換えてください。
次に、FindCell で、検索シートは、ボタンの付けたシートで、とデータ・ソースは、データのある場所のシートです。検索の入力セルとは、最初のご説明の「あるセル」のことです。
入力の仕方は、「A2,赤」とひとつのセルにいれてください。
(色の文字は、「文字を色インデックスに変える関数」にあるもののみに限ります。)
なお、このマクロは、標準モジュールに貼り付けされることを予定していますから、Alt + F11 で、Visual Basic Editor 画面を開けて、次に、[挿入]-[標準モジュール] をクリックして、モジュール画面を開けたら、以下、点線内をすべて貼り付けて、上記のように、設定場所を好きなように書き込み、
Setting_Button のマウスカーソルをコードの中もってきて、F5 を押せば、該当するシートに、ボタンが出来上がっています。そうでない場合は、元のシート画面(Alt + F11)に戻って、ツール-マクロ-マクロ で、Setting_Button を選択してクリックしてください。
ボタンを二重には作らないでください。削除する場合は、ボタンを選んで、右クリック-切り取りです。
'---------------------------------------------------------
Sub Setting_Button()
'フォームボタン設定用のマクロ
'改めてボタンを作る場合は、前のは削除してください。
Dim Sh1 As Worksheet
Dim Lp As Double, Tp As Double, Wd As Double, Ht As Double
Set Sh1 = Worksheets("Sheet1")
With Sh1
With .Range("J1") 'ボタンの設定場所
Lp = .Left: Tp = .Top: Wd = .Width: Ht = .Height
End With
With .Buttons.Add(Lp, Tp, Wd, Ht * 2)
.Caption = "検索"
.OnAction = "FindCell"
.Visible = True
End With
End With
End Sub
'--------------------------------------------------------
Sub FindCell()
'セルの色づけ
Dim Sh1 As Worksheet, Sh2 As Worksheet
Dim myFind As String, myAdd As String, myColor As String
Dim myCI As Integer
Set Sh1 = Worksheets("Sheet1") '検索シート
Set Sh2 = Worksheets("Sheet2") 'データ・ソース
With Sh1
myFind = .Range("D1").Value '検索の入力セル
'例: A2, 赤
If InStr(myFind, ",") Then
myAdd = Mid$(myFind, 1, InStr(myFind, ",") - 1)
myColor = Mid(myFind, InStr(myFind, ",") + 1)
myCI = Color2CIndex(myColor)
Else
myAdd = myFind
End If
If myFind = "" Then
MsgBox "検索値を入力してください。"
Exit Sub
End If
End With
With Sh2
'前に設定した色を消す↓
.UsedRange.Interior.ColorIndex = 0
'パターンの色づけ
.Range(myAdd).Interior.ColorIndex = myCI
'Application.Goto .Range(myFind) '「'」を外すと、その場所に飛ぶ
End With
Beep
End Sub
Private Function Color2CIndex(ByVal myColor As String) As Integer
'文字を色インデックスに変える関数
Dim myColors() As Variant, u As Long
Dim Rtn As Variant
myColors = Array("黒", "白", "赤", "黄緑", "青", "黄色", "ピンク", _
"水色", "茶", "緑", "藍", "黄土", "紫", "濃緑", "灰")
u = UBound(myColors())
Rtn = Application.Match(myColor, myColors, 0)
If Not IsError(Rtn) Then
Color2CIndex = Rtn
Else
Color2CIndex = 1
End If
End Function
'----------------------------------------------------
お礼
ありがとうございました! エクセルって奥が深いですね。 無事解決しました。