[[20221208143146]] 『セル同士の色をリンクさせたい』(CHATA) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セル同士の色をリンクさせたい』(CHATA)

色々調べてみたのですが、分からないのでお分かりになる方、お願い致します。
題名の通り、セル同士の色をリンクしたい、という内容です。

下記の通りにやりたいのですが、3.が出来ません。
1.シート1のA1セルにドロップダウンリストを作成し、『大』『中』『小』が選択できるようにする。
2.シート1のA1セルで『大』『中』『小』いずれか選択すると、シート2のA1セルはその選択に応じた色に変わる(たとえば『大=赤』『中=青』『小=黄』)
3.上記2.に連動して、シート1のA2セルも上記2.と同じ色で表示させたい

1.2.は条件付き書式の設定で出来ましたが、3.のやり方がどうも分からず。。。
1.選択し、2.セルの色が変わる。その結果と連動して3.のセルも2.のセルと同じ色に変えたいのです。

ドロップダウンリスト以外のセルは空白、という前提でセルの色をリンクさせることはできるのでしょうか。

< 使用 Excel:Excel2013、使用 OS:Windows10 >


 なぜシート1のA1セルに連動してシート1のA2セルとシート2のA1セルの色を変える、ではだめなのだろうか?
(ねむねむ) 2022/12/08(木) 14:58:52

コメントありがとうございます。
説明が難しいのですが、条件付の設定が煩雑になるので、シート2のA1セルの色をシート1のA2セルに返したいのです。
(CHATA) 2022/12/08(木) 15:05:41

 マクロでも構わないのだろうか?
(ねむねむ) 2022/12/08(木) 15:19:12

ありがとうございます。どうしてもリンクさせたいのでマクロでも構いません。
ですが全くの素人なのでマクロの設定方法は全然分かりません。
(CHATA) 2022/12/08(木) 15:24:54

 シート名がシート1、シート2だとして。
 まずシート1のシートタブの右クリックからコードの表示を選択してVBEの画面が表示されたらそこに下記を張り付ける。
 Private Sub Worksheet_Change(ByVal Target As Range)
    If Application.Intersect(Target, Range("A1")) Is Nothing Then Exit Sub

    Range("A2").Interior.Color = Worksheets("シート2").Range("A1").DisplayFormat.Interior.Color

 End Sub
 そうしたらVBEの画面を閉じて完成。

 でどうだろうか?
(ねむねむ) 2022/12/08(木) 15:39:51

ありがとうございます。何度もすみません。

おそらく(Target, Range("A1")は最初の質問の1.を指すコードだと思うのですが、2.の結果を3.に反映するだけの場合はどのようなコードになるでしょうか。
※シート1"A2"のカラーはシート2"A1"のカラーとする、というだけを指定するコードです

また、複数セルを同じ条件にする場合はA2:A6、今後行列を追加した場合は$A$2:$A$6のように指定すれば良いのでしょうか

(CHATA) 2022/12/08(木) 16:05:26


 最終的に何をしたいのかを挙げてくれ。
 少なくとも条件付き書式の場合は上で回答したものでいいはずだが。

 >また、複数セルを同じ条件にする場合はA2:A6、今後行列を追加した場合は$A$2:$A$6のように指定すれば良いのでしょうか
 これも具体的に説明してくれ。
 シート2のA1セルの色をシート1のA2セルからA6セルに反映させるのか、それとも
  シート2  シート1
   A1セル     A2セル
   A2セル     A3セル
   A3セル     A4セル
    〜
 といった対応で反映させるのかそれとも他のパターンなのか不明。
(ねむねむ) 2022/12/08(木) 16:20:19

 少なくともセルの色を変更した場合に走るイベントがないためシート2のセルの色を変えるとシート1のセルの色を
 追従させるのは難しいと思う。
(ねむねむ) 2022/12/08(木) 16:24:46

条件付き書式で数式入れたら出来そうな気がする。
(ngk) 2022/12/08(木) 17:05:54

=INDEX(INDIRECT("'Sheet1'!A" & ROW()),1) = "大"

この数式をSheet2の必要なセルに条件付き書式させたら出来ました。
やりたかったことと違ったら申し訳ない。
(ngk) 2022/12/08(木) 17:09:13


おや、勘違い・・・

A1の文字が選択された文字の時に色を付ける条件式書式をA2に入れてみるのはどうだろうか。
判定は色でなく文字なわけだし。
(ngk) 2022/12/08(木) 17:14:05


色々分かりにくくてすみません。やりたいことを纏めてみました。

条件を入力するとシート1のC列に3色で表示させる表をエクセルで作りたい。

例えばこの様な表を作りたい。
■シート1
条件入力欄(A列に質問、B列にドロップダウンで選択項目)、色による判定一覧表(C列)
    A      B             C
1  空腹感  有 無 少し        食事(シート2の結果を色で表示)
2  眠気   有 無 少し        睡眠(シート2の結果を色で表示)
3  かゆみ  有 無 少し       風呂(シート2の結果を色で表示)

■シート2
質問に対して3色で表示欄を設ける。
A1〜3はセルを連結させる。A4〜6、A7〜9も同様
    A   B         
1      朝食   
2  食事  昼食   
3      夕食
4      3H
5  睡眠 +2H
6      +2H
7      週3日
8  風呂  +2日
9      +2日

シート1のB1で有と答えると、シート2のA1、B1〜3は全て赤になる、少しと答えるとA1、B1、B3が青、無と答えるとA1、B1が黄色に表示される。シート1のC欄にその色をリンクさせたい。リンクは、シート2の連結したA1セルの色をC1欄とリンクさせる。

なので、シート2のA1で表示した色とシート1のC1をリンクさせたい。
上記の表の通りにシート1のC列とシート2のA列は同じ文言とする予定です

また、質問を増やしたいときシート1のA1とA2間に行列を挿入して質問を加えても、以降がズレない様にあらかじめしておきたい。数式で$を使うのと同様に、、、

以上です。

(CHATA) 2022/12/08(木) 17:37:14


なんかー取り組みがおかしいような気がするんですよ。
何のためのシート2何ですかね。
ここでもそれぞれ選択するんじゃないんですか。
全て塗りつぶすならシート2なんていらないですよね。
だったらシート1にまとめたらどうですか。
(わからん) 2022/12/08(木) 20:25:19

当然シート1にまとめた方がいいのは分かってるんですよ。
ただ情報が多すぎるので、シートを分けて見やすくしたい、だから
上に書いたやり方でできるならその方法はないか探してる、ということです。
(CHATA) 2022/12/09(金) 03:06:04

 >シート2のA1で表示した色とシート1のC1をリンクさせたい。
 >上記の表の通りにシート1のC列とシート2のA列は同じ文言とする予定です

 やりたいことのエッセンスはそこですよね?

 標準モジュールに後記のVBAを貼り付ける。

 シート1のC1に下式を入力する。

 =setClr(Sheet2!A1,A1:B1)

 '----標準モジュールに貼り付けるVBA-----
 Function setClr(rRef As Range, Optional rEvent As Range)
     setClr = rRef.Value
     Application.Evaluate ("+setColor(" & rRef.Address(, , , True) & "," & Application.Caller.Address & ")")
 End Function

 Private Function setColor(rRef As Range, rTgt As Range)
      rTgt.Interior.Color = rRef.DisplayFormat.Interior.Color
      rTgt.Font.Color = rRef.DisplayFormat.Font.Color
 End Function

(半平太) 2022/12/09(金) 15:53:18


 勉強させていただいています。少し細かい話で恐縮です。

 指摘通りに設定したあとで、
 Sheet1のC1セルに設定した 
     =setClr(Sheet2!A1,A1:B1)
 の第一引数であるSheet2!A1の値を変更(理由は聞かないで下さい)すると、
 setClrが再計算されますね。
 このとき、
 なぜか、意図していないSheet2シートのC1セルにも色(Sheet2!A1の色)が付きます。

 この例では、Sheet2!A1の値は変動させることはたぶんないでしょうけど、ちょっと気持ちが悪いです。

 Function setClr(rRef As Range, Optional rEvent As Range)
      Dim sh As Worksheet
      setClr = rRef.Value
      Set sh = Application.Caller.Parent
      sh.Evaluate ("+setColor(" & rRef.Address(, , , True) & "," & Application.Caller.Address & ")")
 End Function
 などとして、評価(Evaluate)を実行する際の"環境"を、ワークシートレベルに限定すると避けられるようです。
 (または、rTgtもシート指定をつけるかでしょうか)

 # 以下、脇道の感想です。
 # 質問者さんの考えているワークシートのレイアウトは、とても難しいですね。
 # 入力者が理解できるでしょうか。
 # Sheet1とSheet2を行き来するのもわかりにくいでしょうし、二つのシートの位置づけがわかりませんでした。
  
(γ) 2022/12/10(土) 07:52:45

 > なぜか、意図していないSheet2シートのC1セルにも色(Sheet2!A1の色)が付きます。

 以前、皆さんと検討した時、Sheetで修飾すべきとの結論だったのですが、
 今回、ApplicationとWorksheetの違いがどこで出るのか分からなかったので
 深く検討しないままApplicationを採用してしまいました。

 SetColorにとっては、あくまでもその時点でのアクティブなシートが基準になるので
 シート跨りのユーザー定義関数は、どのシートのセルなのか限定しないとマズかったです。

 これはおっしゃる通りです。確認しました。
  ↓
 >評価(Evaluate)を実行する際の"環境"を、ワークシートレベルに限定すると避けられるようです。
 > (または、rTgtもシート指定をつけるかでしょうか)

(半平太) 2022/12/10(土) 09:54:21


 コメントありがとうございました。
  
(γ) 2022/12/10(土) 10:42:22

 こんにちは					

 >シート1のB1で有と答えると、シート2のA1、B1〜3は全て赤になる、少しと答えるとA1、B1、B3が					
 >青、無と答えるとA1、B1が黄色に表示される。シート1のC欄にその色をリンクさせたい。リンクは、シート2					
 >の連結したA1セルの色をC1欄とリンクさせる。					

 言っている事が、非常に解かり難いので…推測ですが					
 上記の文章を整理して					

 ・シート1のB1で「 有 」と答えると、					
   シート2のA1〜A3、B1〜B3 は全て「 赤色 」になる、					

 ・シート1のB1で「 少し 」と答えると、					
   シート2のA1〜A3、B1〜B3 は全て「 青色 」になる、					

 ・シート1のB1で「 無 」と答えると、					
   シート2のA1〜A3、B1〜B3 は全て「 黄色 」になる、					

 >食事(シート2の結果を色で表示)

 これは、矛盾があるので無視します。					

 >シート1のC欄にその色をリンクさせたい。

 これも、意味がさっぱりわからないので無視します。					

 >なので、シート2のA1で表示した色とシート1のC1をリンクさせたい。

 結局...シート1のB1の選択に応じて、					
 シート1のC1と、シート2のA1〜B3 セルの背景色が同じになれば					
 良いと、推測する					

 >条件付き書式の設定で出来ましたが、3.のやり方がどうも分からず	

 条件付き書式を、VBAで設定出来ないことはないが、無駄にコードが					
 長くなるのでしません。					

 ◆条件					
 1行目の見出しは無いとする。					
 データの入力規則に、「 有・無・少し,有,無,少し 」と設定する					

 ◇未選択のシート1の状態					

    |[A]   |[B]         |[C] 					
 [1]|空腹感|有・無・少し|食事					
 [2]|眠気  |有・無・少し|睡眠					
 [3]|かゆみ|有・無・少し|風呂					

 下記のマクロを、シート1モジュールに入れて					
 B列の選択に応じて、何処に背景色が付くか確認してください。					
 やりたい事が違った場合はご容赦を…					

 Option Explicit					
 Private Sub Worksheet_Change(ByVal Target As Range)					
    Dim ws As Worksheet, i&					
    Set ws = Sheets(2)					
    If Intersect(Target, Columns(2)) Is Nothing Then Exit Sub					
    If Target.CountLarge <> 1 Then Exit Sub					
    Application.EnableEvents = False					
    For i = Target.Row * 3 - 2 To Target.Row * 3					
        Select Case Target.Value					
            Case "有"  '' 赤系色 rgbMistyRose					
                Target.Offset(, 1).Interior.Color = RGB(255, 228, 225)					
                ws.Range(ws.Cells(i, 1), ws.Cells(i, 2)).Interior.Color = RGB(255, 228, 225)					
            Case "無"  '' 黄系色 rgbLightYellow					
                Target.Offset(, 1).Interior.Color = RGB(255, 255, 224)					
                ws.Range(ws.Cells(i, 1), ws.Cells(i, 2)).Interior.Color = RGB(255, 255, 224)					
            Case "少し" '' 青系色 rgbAzure					
                Target.Offset(, 1).Interior.Color = RGB(240, 255, 255)					
                ws.Range(ws.Cells(i, 1), ws.Cells(i, 2)).Interior.Color = RGB(240, 255, 255)					
            Case Else '' 色なし xlNone					
                Target.Offset(, 1).Interior.ColorIndex = xlNone					
                ws.Range(ws.Cells(i, 1), ws.Cells(i, 2)).Interior.ColorIndex = xlNone					
        End Select					
    Next					
    Application.EnableEvents = True					
 End Sub					

 ※尚、背景色は薄い色にしてあります、下記のサイトでも参考に					
 色は自由に変更されるとよいでしょう。					

 VBAカラー一覧(組み込み定数、RGB値)|色見本あり					
https://excel-toshokan.com/vba-color-list/					

(あみな) 2022/12/13(火) 16:36:26


マクロとか難しいこと考えなくても、シート1のB列の値で
C列の色を条件付き書式で3つ設定したらいいだけの気がするんだがなぁ・・・

シート1のB列の値でシート2の色分けしてるんだから、同じことでしょ?
(ngk) 2022/12/13(火) 17:18:23


馬鹿げた話というしかないです。
シート1とシート2の関連性がないです。
(ft:q) 2022/12/13(火) 20:46:07

色々教えて下さった方ありがとうございました。
私がやりたかったことは、エクセルではなかなか難しいようです。参考にさせていただきながら色々試してみます。

しかし。。。こういうことをやりたいけれどエクセルではできますかというだけの質問なんですけどねぇ〜。。。
(chata) 2022/12/22(木) 14:31:23


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.