- 締切済み
条件付き書式以外で条件を付けたい!
みなさんいつもありがとうございます。度々お世話になります。 今回はエクセルについての質問です。 以下の様なシフト表を作成しました。 列A 列B 列C 行1 (1)田中 (2)鈴木 (3)山田 行2 (2)石田 (3)西山 - 行3 (3)木村 (4)中山 - 行4 (4)川村 (1)鈴木 (2)田中(良) ・ ・ ・ 同じ番号のグループと重ならないように条件をつけて名前に色を変えたいのですが、6グループあるので条件付き書式は使えません。VBAで当初作成を試みたのですがどうにも上手くいかないので、教えて頂けると大変助かります!!どうかご教授願いますm(_ _)m
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- jindon
- ベストアンサー率43% (50/116)
大変遅くなりました。 ご希望のとおりではありませんが。 Wクリックで作動します。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) With Target.Cells(1, 1) If Intersect(.Cells, Range("b:d")) Is Nothing Then Exit Sub .Interior.ColorIndex = 8 End With End Sub
- jindon
- ベストアンサー率43% (50/116)
jindonです >プルダウンから苗字を選択して入力していたので いまいち状況が見えません。 入力規則のプルダウンですか? そのリストの中に (1)田中 (2)田中 (3)田中 . . (6)中村 等あって、それから選択するのでしたら、 change イベントが認知するはずですが?
- jindon
- ベストアンサー率43% (50/116)
こんなかんじでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Range With Target.Cells(1, 1) If Intersect(.Cells, Range("a:f")) Is Nothing Then Exit Sub Application.EnableEvents = False For Each r In Intersect(Range("a:f"), Me.UsedRange) If Not IsEmpty(r) Then If InStr(r, "(") > 0 Then x = Val(Replace(r, "(", vbNullString)) Select Case x Case 1 clr = 3 Case 2 clr = 4 Case 3 clr = 6 Case 4 clr = 8 Case 5 clr = 10 Case 6 clr = 12 End Select r.Interior.ColorIndex = clr End If End If Next End With Application.EnableEvents = True End Sub ----------------- 色番号、Intersect(.Cells, Range("a:f")) 、 夫々、必要に応じて変更すること。
お礼
jindonさん ご返信が遅くなり、すみません! あまりの回答の早さに驚きました☆ 早速会社で試したところ、成功しました(^^) ただ一つ書き忘れた事があるのですが、値をセルに直接入力するのではなく、プルダウンから苗字を選択して入力していたので、一度選択後編集状態(F2を押して)にし、Enterを押さないとマクロが実行されません。この手間を省く事は出来ますでしょうか?? VBA初心者の為、何卒ご教授願いますm(_ _)m
- imogasi
- ベストアンサー率27% (4737/17069)
難しそうだが、質問の意味を補足してください。 ・(2)鈴木の(2)はグループ番号か? ・グループ番号の数字は()つきで氏名の前にくっついていて、1セルの中に納まっているのか?グループ番号は隣の別列を使ってないですね。 ・人名+番号にグループ別の文字またはセルの色をつけたいということですか? ・VBAではそんなに難しくないと思いますが、表がある時期(月1回とか)決定して、内容が再々変わるのか。イベントプロシージュアーでなく、変わった都度、ボタンなど押す仕組みにしても良いか。 ・VBAでうまくいかないのは番号の割り出しか?
補足
早速の御回答ありがとうございます! 質問の回答ですが、 >・(2)鈴木の(2)はグループ番号か? →()内はグループ番号です。 >・グループ番号の数字は()つきで氏名の前にくっついていて、1セルの中に納まっているのか? →1セルの中に納まっています。 >グループ番号は隣の別列を使ってないですね。 →はい、使っていません。 >・人名+番号にグループ別の文字またはセルの色をつけたいということですか? →はい、そうです。 シフト表を作成する際に同じグループの人が前後、又は同じ日にならないようにグループカラーで色分けをして、判別したいのです。 >・VBAではそんなに難しくないと思いますが、表がある時期(月1回とか)決定して、内容が再々変わるのか。イベントプロシージュアーでなく、変わった都度、ボタンなど押す仕組みにしても良いか。 →表は月毎にシートを分け、3ヶ月毎に作成しています。出来ればファイルを開いた時にマクロが実行されるようにしたいのですが、、、(開いた時には色分けされているような。) >・VBAでうまくいかないのは番号の割り出しか? 作成したVBAはまったく動きません(><) 以上、大変恐縮ですが宜しく御願い致します。m(_ _)m
補足
jindonさん 返信が大変遅くなり、すみません!! 言葉足らずでしたので、補足します。 状況が少し複雑なのですが、下記の名前は同じシート内に別に作った表からアルファべットを選択して埋めているのです。 ※1 表1の列Aが入力規則のプルダウンで選択できるようになっている。 ※2 列B,C,Dには関数(=IF(A1="","",VLOOKUP(A1,$E$1:$H$37,2,FALSE)))が入っていて、列Aのプルダウンからアルファベットを選択すると、表2の該当するアルファベットの行がそのまま表1の列B,C,Dに値が入る。 ■表1(シフト表) 列A 列B 列C 列D 行1 A1 (1)田中 (2)鈴木 (3)山田 行2 B1 (2)石田 (3)西山 - 行3 C1 (3)木村 (4)中山 - 行4 D1 (4)川村 (1)鈴木 (2)田中(良) --------------------------------------------- ■表2(シフト表をプルダウンで選択する為の表) 列E 列F 列G 列H 行1 A1 (1)田中 (2)鈴木 (3)山田 行2 B1 (2)石田 (3)西山 - 行3 C1 (3)木村 (4)中山 - 行4 D1 (4)川村 (1)鈴木 (2)田中(良) ・ ・ ・ 問題は表1の列Aで選択した時に、列B,C,Dの値にすぐ色が反映される訳ではなく、一度B~Dの任意のセルを編集状態にし、Enterキーを押すと色がつくということです。 分かりづらいのですが、何卒ご教授願います!