こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

セルを参照する マクロ? 条件書式?

セルを参照するマクロまたは条件書式について教えてください。

シートAのセルA1に、ひらがなの【あ】という文字が入力された時
B1セルに入力できる値をシートBのE2からH2を参照

シートAのセルA1に、ひらがなの【い】という文字が入力された時
B1セルに入力できる値をシートBのE3からH3を参照

というのは値のみなら、関数で行えると思いますが
添付画像のようにセルに塗りつぶしがされている際
この塗りつぶしも反映させたいと考えております。

ネットには条件書式でやればという情報はいくつかでていますが
あ、い、う にそれぞれ同じ値があるとそれはできないかと思います。

調べたところ、入力規制のリストでは不可能なようなので

A1セルに【あ】と入力されていて尚且つB1セルに1と入力されたら
オレンジに、2と入力されたら青に・・・
A1セルに【い】と入力されていて尚且つB1セルに1と入力されたら
青に、2と入力されたらオレンジに・・・

のような感じでもよいと考えています。

もちろん指定した範囲内にない文字の場合(例えばB1セルに5を入力)は
塗りつぶしは起こらないでいいです。

マクロなのか条件書式なのかはわからないのですが
上記のようなことができるか教えてください。

ちなみに画像では説明の為
1つのシート内に書いてありますが
実際はシートAとBの2つがあります。

宜しくお願いします。

投稿日時 - 2018-03-07 12:59:21

QNo.9435982

すぐに回答ほしいです

質問者が選んだベストアンサー

試しに、マクロを書いてみました。

質問者さんがそれなりにマクロと向き合わないと
質問者さんの期待する仕様にはフィットしないかもしれません。

以下、前提条件です。

・あ、い、う側のデータは縦方向に入力される
・1、2、3側のデータは、あ、い、うの埋まる行の別な列に埋まる。
・あ、い、う側のデータは途中に空欄が無く、上詰めで入力される。
・ヒットしなかったら背景色を白にする。

Option Explicit

Const TblName = "Tbl"   'データ候補群の埋まったシートの名前
Const SLineNum = 1     'データ入力開始行
Const Data1ColNum = 1   '第一群のデータが埋まる列番号
Const Data2ColNum = 2   '第二群のデータが埋まる列番号

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 PasteMain
End Sub

Sub PasteMain()
 Dim wkL As Integer
 wkL = SLineNum
 With ThisWorkbook.ActiveSheet
  Do
   If .Cells(wkL, Data1ColNum).Value = "" Then Exit Sub
   .Cells(wkL, Data2ColNum).Interior.Color = _
     GetColor(.Cells(wkL, Data1ColNum).Value, .Cells(wkL, Data2ColNum).Value)
   wkL = wkL + 1
  Loop
 End With
End Sub


Function GetColor(Txt1 As String, Txt2 As String) As Long
 Dim wkCnt1 As Integer
 Dim wkCnt2 As Integer
 Dim HitNum1 As Integer
 Dim HitNum2 As Integer
 
 GetColor = 16777215
 HitNum1 = 0
 HitNum2 = 0
 wkCnt1 = 0
 wkCnt2 = 1
 
 With ThisWorkbook.Sheets(TblName)
  Do
   wkCnt1 = wkCnt1 + 1
   If .Cells(wkCnt1, 1).Value = "" Then Exit Do
   If .Cells(wkCnt1, 1).Value = Txt1 Then
    HitNum1 = wkCnt1
   End If
  Loop
 
  If HitNum1 = 0 Then Exit Function
 
  Do
   wkCnt2 = wkCnt2 + 1
   If .Cells(HitNum1, wkCnt2).Value = "" Then Exit Do
   If .Cells(HitNum1, wkCnt2).Value = Txt2 Then
    HitNum2 = wkCnt2
   End If
  Loop
 
  If ((HitNum1 > 0) And (HitNum2 > 1)) Then
   GetColor = .Cells(HitNum1, HitNum2).Interior.Color
  End If
 End With
End Function

投稿日時 - 2018-03-07 21:16:50

お礼

ありがとうございます。
自分なりにいろいろと調べて
いただいたコードを参考に改造してみました。
目的のことも行えて非常に助かりました。
ややこしいお願いにも関わらずありがとうございました。

投稿日時 - 2018-03-07 22:21:48

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

ご質問の主文は
> マクロなのか条件書式なのかはわからないのですが
> 上記のようなことができるか教えてください。
ここですね。

できますが、面倒ですよ。
マクロでもがんばって勉強すればできますし、
条件付き書式でもがんばって条件を見出せばできます。

人に依るでしょうが、私ならマクロを選択します。
添付図なら、
・A1と同じ文字列をD列から検索し、行番号を取る。
・B1に見合う範囲を使って入力規則を設定する。
のがA1セルの内容が変わった時のマクロ。
B1セルが変わった時のマクロは
・B1の書式を初期化。
・A1と同じ文字列をD列から検索し、行番号を取る。
・見合う範囲からB1の値を検索し、コピー。
・B1に貼り付け。
でしょうか。
作りはしませんが、そんなに難しいものでも無いような気がします。



で、条件付き書式については、
私には色分けの条件を見出せないので深くは説明できません。
ただ、入力規則に関しては「エクセル 範囲 名前 可変」などで
Web検索するとヒントくらいは見つかると思いますよ。
多分、縦方向にリストがあるのが多いと思いますが、
横方向でも応用可能です。
ま、縦に組み直せるならそれが一番楽ですが。

投稿日時 - 2018-03-07 20:19:11

ANo.2

言葉での説明はそれくらいにして、
セル A1、B1 にデータを入力して、希望する結果を示す色付きデータを示してください。ゴチャゴチャ説明でなく、視覚的に一目瞭然たるものをお願いします。

投稿日時 - 2018-03-07 15:13:48