

会議室予約表を作成したく、下記のサイトを見つけて
自分の使用したい表を作成しているのですが思うようにいきません。
サイト↓
https://macronoblog.com/2019/08/04/vbacode-1-%E4 …
「やりたいこと」
使用者名のリストを追加し、その人が選択されたらセルの色は緑、
他の人は青というような方法を追加したい
例 AAさん 2021/7/2 14:00~14:30 会議室1 セルの色:青
BBさん 2021/7/2 14:00~14:30 会議室2 セルの色:赤
CCさん 2021/7/3 11:00~12:00 会議室2 セルの色:緑
このサイトにあるコードでは、「Now」が使用されていて「今」の日付しか選択できませんが
自分の方では日付の選択は変えれるようになっています。
「考えたこと」
※日時選択、会議室の有無、時間判定は割愛させていただきます。
時間検索し、指定の部屋番号を塗りつぶしの部分だけを載せています。
W3に使用者名を入れるセルがあります。
If Range("W3").Value = "AA" Then
If Not .Cells(roomNo, i).Interior.Color = vbBlue Then
.Cells(roomNo, i).Interior.Color = vbBlue
If Range("W3").Value = "BB" Then
If Not .Cells(roomNo, i).Interior.Color = vbRed Then
.Cells(roomNo, i).Interior.Color = vbRed
If Range("W3").Value = "CC" Then
If Not .Cells(roomNo, i).Interior.Color = vbGreen Then
.Cells(roomNo, i).Interior.Color = vbGreen
Else
MsgBox "予約済みです"
Exit For
End If
End If
End If
End If
End If
End If
If文の書き方がおかしいのだと思います。
文章がぐちゃぐちゃですみません。
詳しい方、ご教授お願いします。

No.1ベストアンサー
- 回答日時:
おそらく、
W3が”AA”ならば・・・
W3が”BB”ならば・・・
のようにしたのでしょう、
>If Range("W3").Value = "AA" Then
>If Not .Cells(roomNo, i).Interior.Color = vbBlue Then
>.Cells(roomNo, i).Interior.Color = vbBlue
>If Range("W3").Value = "BB" Then・・・
このような書き方(入れ子構造)をすると、W3が”AA”かつ”BB”ならば・・・という意味になってしまいます。
少なくとも、
If Range("W3").Value = "AA" Then・・・
End If
If Range("W3").Value = "BB" Then・・・
End If
のようにしなければ各々の条件では動作しません。
また、このように1つの条件でいくつかの処理に分岐したいのであれば
SELECT Case構文がお勧めです。
例
SELECT Case Range("W3").Value
Case ”AA”
’W3が”AA”の時の処理
Case ”BB”
’W3が”BB”の時の処理
Case Else ’必要であれば
’その他の場合の処理
End Select
参考になりそうなページを紹介しておきます。
https://www.sejuku.net/blog/30642
http://officetanaka.net/excel/vba/statement/Sele …
No.2
- 回答日時:
こんにちは
前後関係が不明なので、よくわかりませんけれど…
>If文の書き方がおかしいのだと思います。
If ~~ End If の関係を確かめるのが宜しいかと。
エラーが出るなら、メッセージもヒントになります。
想像するところ、こんな感じになさりたいのかな?
(Notの判定をわざわざ行わなくても、結果は同じなので省略しています)
If Range("W3").Value = "AA" Then
.Cells(roomNo, i).Interior.Color = vbBlue
Else If Range("W3").Value = "BB" Then
.Cells(roomNo, i).Interior.Color = vbRed
Else If Range("W3").Value = "CC" Then
.Cells(roomNo, i).Interior.Color = vbGreen
Else
.Cells(roomNo, i).Interior.Color = xlNone
End If
同じ内容なら、Case文を用いる方が間違えが少なくなるかも。
Select Case Range("W3").Value
Case "AA": col = vbBlue
Case "BB": col = vbRed
Case "CC": col = vbGreen
Case Else: col = xlNone
End Select
.Cells(roomNo, i).Interior.Color = col
※ Range("W3").Value にはドットを付けていませんが、原文がそうなっているのでそのままです。
※ 登場人物は3人限定なのでしょうか?
人数が多い場合は、別にリストを作っておいてそれを参照して色を設定するような仕組みになさるのが宜しいかと。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定の色のついたセルを削除
-
Excel UserForm の表示位置
-
【Excel VBA】マクロで書き込ん...
-
C# DataGridViewで複数選択した...
-
[Excel VBA] このコードでは行...
-
【VBA】【ユーザーフォーム_Lis...
-
複数指定セルの可視セルのみを...
-
VBAマクロ実行時エラーの修正に...
-
データグリッドビューの結合セ...
-
マクロ初心者です。 マクロで範...
-
Excel VBAで特定の範囲の空白セ...
-
【Excel VBA】一番右端セルまで...
-
Excel 範囲指定スクショについ...
-
For~Next ループ内でUnionメソ...
-
下記のマクロの説明(意味)を...
-
指定した文字から指定した文字...
-
エクセルVBAで、セル内のテキス...
-
マウスオーバーでセル内の背景...
-
EXCEL 2010 VBAでピボットで複...
-
For Eachを使わないVBA マクロ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel UserForm の表示位置
-
VBAマクロ実行時エラーの修正に...
-
特定の色のついたセルを削除
-
Excelで空白セル直前のセルデー...
-
エクセルVBA 配列からセルに「...
-
【VBA】【ユーザーフォーム_Lis...
-
【VBA】写真の貼り付けコードが...
-
データグリッドビューの結合セ...
-
複数指定セルの可視セルのみを...
-
エクセル、マクロで番号を読込...
-
CellEnterイベント仕様について
-
C# DataGridViewで複数選択した...
-
【ExcelVBA】値を変更しながら...
-
EXCEL VBA 文中の書式ごと複写...
-
マクロ初心者です。 マクロで範...
-
【Excel VBA】一番右端セルまで...
-
【Excel VBA】マクロで書き込ん...
-
VBA:日付を配列に入れ別セルに...
-
DataGridViewでグリッド内に線...
-
DataGridViewのフォーカス遷移...
おすすめ情報
お二方ありがとうございました!
提示していただいたコード、サイトをもとに
なんとか理想に近い表ができました!
はじめに回答してくださった方をBAとします。