dポイントプレゼントキャンペーン実施中!

会議室予約表を作成したく、下記のサイトを見つけて
自分の使用したい表を作成しているのですが思うようにいきません。

サイト↓
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文の書き方がおかしいのだと思います。

文章がぐちゃぐちゃですみません。
詳しい方、ご教授お願いします。

「「VBA」会議室予約表の作成」の質問画像

質問者からの補足コメント

  • うれしい

    お二方ありがとうございました!

    提示していただいたコード、サイトをもとに
    なんとか理想に近い表ができました!

    はじめに回答してくださった方をBAとします。

      補足日時:2021/07/02 15:05

A 回答 (2件)

おそらく、


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 …
    • good
    • 0

こんにちは



前後関係が不明なので、よくわかりませんけれど…

>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人限定なのでしょうか?
 人数が多い場合は、別にリストを作っておいてそれを参照して色を設定するような仕組みになさるのが宜しいかと。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!