![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
いつもお世話になります。エクセルのバージョンは2010以降でお願いしたいのですが。
セル(結合してあります)の背景色を変えるのですが、条件があります。
あるセル(例えば、A1)に、結合してあるセル(例えばG1:I5)へリンクが設定あります。
このようなリンクが張ってあるものがいくつかあります。
ここでA1をクリックすると、当然G1:I5の範囲を□で囲い表示するわけですが、
この□で囲まれているG1:I5の背景色を変更したい。(例えば水色に)
そして、違うセルへカーソルを移動させると、G1:I5の背景色を白(元の色)に戻したい。
以上です。よろしくお願いします。
No.7ベストアンサー
- 回答日時:
こんなのは、どうでしょう。
FollowHyperlinkイベントプロシジャで、飛び先のセルにMYRNGという名前を付けた後に、条件付き書式で色を付けます(条件付きと言いながら、必ずTrueなのですが・・・)。
違うセルが選択された時に、SelectionChangeイベントプロシジャで、先ほど名前を付けたMYRNGの条件付き書式を削除しています。
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
ActiveWorkbook.Names.Add Name:="MYRNG", RefersTo:="=" & ActiveSheet.Name & "!" & Selection.Address
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=TRUE"
Selection.FormatConditions(1).Interior.Color = 65535
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Range("MYRNG").FormatConditions.Delete
End Sub
No.8
- 回答日時:
No.6 の回答はしましたが、どうも今の時点では、No.7 様のコードのほうが良いようです。
私は、オプションで、ハイパーリンクを複数の色付けを考えていましたが、成功しませんでした。
簡単なコードで済むなら、簡単なほうがよいです。
ただ、私なら、
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
のCallBack のTarget 変数は、利用します。
みなさま、ご回答ありがとうございます。
家族共々インフルエンザ(?)もどきで伏せっていて、回答を確認すらできていませんでした。
ママチャリさま、WindFallerさま、ご指摘のコードを勉強しながら試してみます。
ありがとうございます。
No.6
- 回答日時:
違う手法を考えてみました。
これは、複数の場所に色をつけることはできません。ハイパーリンクをひとつクリックすれば、そのリンク場所の色が塗られます。
'//上書きで貼り付けてください。
Dim colAdr As New Collection
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Dim h As String
h = Target.SubAddress
Range(h).MergeArea.Interior.ColorIndex = 8 '水色
On Error Resume Next
colAdr.Add h, h
On Error GoTo 0
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Adr As String
Dim cl As Variant
Dim cnt As Long
On Error Resume Next
If Target.Hyperlinks.Count > 0 Then Exit Sub
Me.CheckColors
cnt = colAdr.Count
If cnt > 1 Then
For Each cl In colAdr
If Not Intersect(Range(cl).MergeArea.EntireRow, Target) Is Nothing Then
Adr = cl
Exit For
End If
Next cl
ElseIf cnt = 1 Then
Adr = colAdr.Item(1)
End If
If Intersect(Range(Adr), Target) Is Nothing And cnt <> 0 Then
Range(Adr).MergeArea.Interior.ColorIndex = xlColorIndexNone
colAdr.Remove Adr
End If
On Error GoTo 0
End Sub
Sub CheckColors()
Dim h As String
Dim hi As Object
Dim i As Long
Set cc = colAdr
For Each hi In Me.Hyperlinks
h = hi.SubAddress
If Range(h).MergeArea.Interior.ColorIndex <> xlColorIndexNone Then
i = i + 1
colAdr.Add h, h
End If
Next
End Sub
No.5
- 回答日時:
複数のリンクに作動するように変えてみましたが、何かがすっきりしていません。
イメージとしては、たぶん、スイッチがハイパーリンクで、オン・オフを色で表すという感じではないかと思います。
もうちょっと待ってください。
だから、これはイメージとは違い正確性に欠けます。臨時の措置です。
'//シートモジュール
Dim strAdr As String
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
On Error Resume Next
If Not Intersect(Range(Target.SubAddress), ActiveCell) Is Nothing Then
Range(Target.SubAddress).MergeArea.Interior.ColorIndex = 8
strAdr = Target.SubAddress
End If
Application.Goto Range(Target.SubAddress)
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Intersect(Range(strAdr), Target) Is Nothing Then
Range(strAdr).Interior.ColorIndex = xlColorIndexNone
End If
If Err() <> 0 Then
If Target.MergeCells And IsNull(Target.Interior.ColorIndex) Then
Target.Interior.ColorIndex = xlColorIndexNone
End If
End If
On Error GoTo 0
End Sub
No.4
- 回答日時:
No.3の回答者です。
>もっと10~15個ある場合はどうすればいいのでしょうか?
>不勉強が身にしみます。
そんなことはないのですが、この質問をみて確信したことがひとつあります。時代が変わっているということですね。
質問そのものが、今までにない内容なのです。だんだん、私はついていけなくなっているようです。
もう、ちょっと待ってください。しかし、まったく違う考えで回答する人物が現れてくるかもしれません。
No.3
- 回答日時:
多少問題はあるとは思いますが、とりあえずアップしておきます。
説明は、No.2様の通りのつもりだったけれども、変えてみました。やっぱりコードは書くまで分からないです。色塗りしたまま保存した場合は、strAdr に残したものは消えてしまいます。それをどこかのセルに書くか、以下のように、エラーが発生した場合を想定して消す(結合セルの中でクリック)。
残る問題は複数存在する場合。(まだ考えていません)
ふたつでセットです。
'//シートモジュール
Dim strAdr As String
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
If Not Intersect(Range(Target.Name), ActiveCell) Is Nothing Then
Range(Target.Name).Interior.ColorIndex = 8
strAdr = Target.Name
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Intersect(Range(strAdr), Target) Is Nothing Then
Range(strAdr).Interior.ColorIndex = xlColorIndexNone
End If
If Err() <> 0 Then
If Target.MergeCells And IsNull(Target.Interior.ColorIndex) Then
Target.Interior.ColorIndex = xlColorIndexNone
End If
End If
On Error GoTo 0
End Sub
なるほど、そういうことですか。
できることがわかりうれしい限りです。
ただ、ご提示いただいたコードは
2箇所のみですね?
もっと10~15個ある場合はどうすればいいのでしょうか?
不勉強が身にしみます。
No.2
- 回答日時:
こんにちは
「リンクをたどった時だけセルの色を変える」野に対して、直接の操作で「被リンクセルを選択した場合は何もしない」という考え方で良いのですよね。
イマイチはっきりと内容を把握できていないので、考え方のみとなりますが、以下のような仕組みを作成することで、ご質問の内容を実現できないでしょうか。(ひとまず、同一シート内で考えました)
シートモジュールのVBAで、アドレス及び色の記録用変数をシートレベルで用意しておきます。
Worksheet_FollowHyperlinkイベントで
・選択範囲をアドレスに記録、現在の色を控えておく
・選択範囲を水色にする
Worksheet_SelectionChangeイベントで
・アドレスの記録があれば、その範囲の色を控えの色に戻す
・アドレスの記録をクリア
No.1
- 回答日時:
A1をダブルクリックすると、G1:I5の範囲を□で囲い表示されますね。
(Excel365での標準の動作)
シングルクリックで動作させたいなら、こんな感じかな。
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim Precedents As Range
Application.EnableEvents = False
On Error Resume Next
Set Precedents = Target.DirectPrecedents
If Not Precedents Is Nothing Then
Union(Target, Precedents).Select
End If
Application.EnableEvents = True
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 昨日、質問した件『VBA にて、条件付き書式で背景色を設定しているセルの範囲で、背景色付きのセルをカ 4 2022/04/07 14:39
- Visual Basic(VBA) VBA にて、条件付き書式で背景色を設定しているセルの範囲で、背景色付きのセルをカウントできる、VB 2 2022/04/06 21:33
- Excel(エクセル) こんなことできますか?例えば、sheetに貼り付けた図形のタイトルを、セルA1の文字で表示する。 5 2022/04/22 15:25
- その他(Microsoft Office) エクセル 表の移動 2 2023/04/05 20:29
- Excel(エクセル) 条件付き書式 ある範囲で色がついているセルと同行の別のセルに色を付けたい 4 2022/04/20 07:04
- Excel(エクセル) エクセルのマクロを教えてください シート内の背景色が赤のセルだけを残して 他のセルは削除したいです。 3 2023/07/12 12:26
- 会計ソフト・業務用ソフト エクセル 背景色のついたセル位置を参考にして固定の数値を取得する 4 2022/07/11 08:44
- その他(Microsoft Office) googleスプレットシートで左右の数値を比較して色判別させたい 2 2022/06/06 18:33
- Excel(エクセル) セル内の一部に別セルを差し込む 3 2022/09/18 04:39
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/09 14:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
貼り付けで複数セルに貼り付けたい
-
エクセル 足して割る
-
【エクセル】IF関数 Aまたは...
-
Excelでのコメント表示位置
-
EXCEL VBA セルに既に入...
-
エクセルの足し算で、小数点以...
-
枠に収まらない文字を非表示に...
-
Excel2003 の『コメント』の編...
-
エクセルで指定したセルのどれ...
-
エクセルで休憩時間を引く時と...
-
Excel データ入力に応じて自動...
-
Excelの関数で、性別が男なら『...
-
エクセルVBAでの「値貼り付け、...
-
EXEL:入力中のセルの数式を非...
-
エクセルのセルの枠を超えて文...
-
Excelで数式内の文字色を一部だ...
-
対象セル内(複数)が埋まった...
-
アニメの原画について
-
ミセルとエマルション
-
毎日の入力後に平均値を出した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル 足して割る
-
【エクセル】IF関数 Aまたは...
-
エクセルで指定したセルのどれ...
-
Excelで数式内の文字色を一部だ...
-
Excelでのコメント表示位置
-
貼り付けで複数セルに貼り付けたい
-
対象セル内(複数)が埋まった...
-
セルをクリック⇒そのセルに入力...
-
【Excel】 セルの色での判断は...
-
エクセルの一つのセルに複数の...
-
EXCEL VBA セルに既に入...
-
エクセル “13ヶ月”を“1年1ヶ月...
-
エクセル オートフィルタで絞...
-
エクセルのセルの枠を超えて文...
-
excelのCOUNTIF関数で、『範囲=...
-
(Excel)数字記入セルの数値の後...
-
枠に収まらない文字を非表示に...
-
Excel2003 の『コメント』の編...
-
Excel 例A(1+9) のように番地の...
-
複数のセルのいずれかに数字が...
おすすめ情報