[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『条件付き書式マクロについて』(yama)
以下にて、文字色を設定しています
対象となるセルの色が変わると同時に同じ行の左隣のセル2つ(A・B列)も同時に
変化させる方法を教授ください。
よろしくお願いします
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, Rmg As Range Dim i As Long If Not Intersect(Target, Range("C6:C20")) Is Nothing Then For Each rng In Target With rng Select Case True Case .Value Like "*誕生日*": i = 3 Case .Value Like "休日": i = 2 .Font.Bold = True Case .Value Like "*記念日*": i = 5 Case Else: i = 0 .Font.Bold = False End Select .Font.ColorIndex = i End With Next Set rng = Nothing
< 使用 Excel:Excel2013、使用 OS:Windows7 >
.Font.ColorIndex = i
これを
.EntireRow.Range("A1:C1").Font.ColorIndex = i
で試してみてください。
もし太字も反映させるなら .Font.Bold のところも .EntireRow.Range("A1:C1").Font.Bold に。
(β) 2015/12/08(火) 08:22
With rng Select Case True Case .Value Like "*誕生日*": i = 3 Case .Value Like "休日": i = 2 .Offset(, -2).Resize(, 3).Font.Bold = True Case .Value Like "*記念日*": i = 5 Case Else: i = 0 .Offset(, -2).Resize(, 3).Font.Bold = False End Select rng.Offset(, -2).Resize(, 3).Font.ColorIndex = i End With
みたいな感じでいいのかな? (se_9) 2015/12/08(火) 08:52
日付(A列)・曜日(B列)・誕生日/記念日など(C列)
C列部分は関数で表示させている。
=IF(MONTH(DATE($D$4,$F$4,A6))=$F$4,IF(ISNA(VLOOKUP(DATE($D$4,$F$4,A6),休日,3,FALSE)),"",VLOOKUP(DATE($D$4,$F$4,A6),休日,3,FALSE)),"")
シートに変化があったときマクロ作動は、よってカレンダーへは直接記入しない
場合があるのですが イベントの種類Worksheet_Change Worksheet_SelectionChange
変更してみたのですが 年月を変更しただけではイベントが発生しないようです
対象のセルをClickすれば色が変化します。
上記のような使い勝手の場合のイベントは何れ設定すれば変化する年月日に対応出来るのでしょうか
わかりにくい説明ですみません。
よろしくお願いします。
(yama) 2015/12/08(火) 12:13
式による値の変化ではChangeイベントは発生しませんので、その式で参照している(かつ、実際に入力するる)セルの変化をウォッチして イベント処理をします。 その入力により、C6〜C20 が、どのように変化するのかわからないので、そこは、そちらで考えてください。
やっかいなのは、関連の入力セルが複数あった時ですね。 1つ目のセルの変化で処理、2つ目のセルの変化でも、またまた処理、3つ目のセル・・・・
このあたりも、実際の入力運用がどうなっているのかわからないので、そちらで考えてください。
(β) 2015/12/08(火) 16:08
If Not Intersect(Target, Range("C6:C20")) Is Nothing ThenとEnd Ifを削って For Each rng In TargetをFor Each rng In Range("C6:C20")に変更
C6セルをダブルクリック(またはF2キー)→ Enter で色が変わるけど面倒ですよね。
ちなみに訂正ですが rng.Offset(, -2).Resize(, 3).Font.ColorIndex = i のrngはいらなかったですね。 (se_9) 2015/12/08(火) 17:29
>>これに変わる何か?VBAはないのでしょうか・・・
いやぁ・・・ Changeイベントなんでしょうね。ただし、変更対象は C6:C20 ではなく、年と月のセル。 ただ、申し上げたように、2つのセルのいずれが入力されても発生しますから、無駄な処理が行われるわけです。 めったに実害はないでしょうし、今回のテーマでは大丈夫でしょうけど、仕様によっては不具合が発生することもあるかもしれません。
それより、年と月を別のセルにしているのが、面倒を生み出す元だと思います。
基準月を1つのセルにして2015/12 といったように入力。実際のデータは 2015/12/1 になりますが表示書式でyyyy年m月にしておきます。 そうしておけば、イベントを発生させるトリガーは、この年月をいれるセルに変更があった場合の Changeイベント。
VBA内でもシート関数上でも、年は Year(そのセル) で取得できますし、月は Month(そのセル) で取得できます。
そうしておいて、そのセルに変更があれば、C6:C20をすべてループで処理します。
この構えでいかがですか?
(β) 2015/12/08(火) 18:46
以下のループ方法が?です 範囲→"C6:C20,M6:M21"
よろしくお願いします。
> そうしておいて、そのセルに変更があれば、C6:C20,M6:M21をすべてループで処理します。
> この構えでいかがですか?
(yama) 2015/12/08(火) 19:30
C6:C20 と M6:M21 の関係がよくわかりません。(M6:M20 なら、想像はつくのですが)
C6:C20 は計算式の結果ですよね。
たとえば M6 が変更になると、C6が変わる、M7 が変更になると C7 がかわるということですか? それにしては M21 がよくわかりません。
(β) 2015/12/08(火) 23:56
A B C E・・・ K L M N 1〜5行目まで見出し行など
6 1 曜日 記念日など 予定 16 曜日 記念日など 予定など 7 2 17 8 3 18 9 4 19 ・ ・ ・ 20 15 30 21 空 31
B6=TEXT(DATE(YEAR($D$4),MONTH($D$4),DAY(A6)),"aaa")
C6=IF(MONTH(DATE(YEAR($D$4),MONTH($D$4),DAY(A6)))=MONTH($D$4),IF(ISNA(VLOOKUP(DATE(YEAR($D$4),MONTH($D$4),DAY(A6)),休日,3,FALSE)),"",VLOOKUP(DATE(YEAR($D$4),MONTH($D$4),DAY(A6)),休日,3,FALSE)),"")
こんな感じの予定表です。
したがって今回対象列はC列とM列ということになります。
お解りいただけますか。
よろしくお願いします
(yama) 2015/12/09(水) 00:45
マクロはエキスパートのβさんにおまかせするとして(無責任ですみません) エクセルのバージョンが2013なので、C6セルの関数は =IF(MONTH(DATE(YEAR($D$4),MONTH($D$4),DAY(A6)))=MONTH($D$4),IFERROR(VLOOKUP(DATE(YEAR($D$4),MONTH($D$4),DAY(A6)),休日,3,FALSE),""),"")
でもいいと思います。 (se_9) 2015/12/09(水) 06:04
日付入力を D4 に一本化されたわけですから D4 の変化「のみ」を判定し、変化したら C6:C20,M6:M21 「すべて」を処理します。
If Not Intersect(Target, Range("C6:C20")) Is Nothing Then For Each rng In Target
ここを
If Not Intersect(Target, Range("D4")) Is Nothing Then For Each rng In Range("C6:C20,M6:M21")
なお、ブロックが2つですから、書式設定を3列分行うコードは、(se_9)さん提示の Offset型にする必要がありますね。
(β) 2015/12/09(水) 07:58
se_9さん
旧バージョンで作成したままでした。
ISNAは不要なんですね スッキリしました。
ありがとうございました。
また、質問させていただくことも
あると思いますがその節はよろしくお願いします
(yama) 2015/12/09(水) 12:28
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.