• 締切済み

VBA条件文について

はじめまして。 現在、VBAで簡単な勤務管理表を作成しております。 その過程で、一部分の条件が意図するように動作せず悩んでいます。 ------------------------------------------------------------ If Left(Schedule.Cells(16, 3).Value, 2) = "祝日" Then Schedule.Cells(16, 3).Font.Color = vbBlue Schedule.Cells(16, 3).Interior.Color = vbRed End If  ⇒対象のセルの値の先頭2文字が「祝日」の場合、    セルないしセルの文字の色を設定する ------------------------------------------------------------ 初歩的な質問で申し訳ございませんが、 誤りについてご教授いただけませんでしょうか?

みんなの回答

  • kybo
  • ベストアンサー率53% (349/647)
回答No.3

「Schedule」がシート名を格納した変数名である場合以下の様にします。 Sub macro() Schedule = "Sheet1" With Worksheets(Schedule) If Left(.Cells(16, 3).Value, 2) = "祝日" Then .Cells(16, 3).Font.Color = vbBlue .Cells(16, 3).Interior.Color = vbRed End If End With End Sub あなたのその記述方法は、シートのオブジェクト名を「Schedule」にした場合の記述方法です。 ※画像の様にオブジェクト名の部分を変更した場合のものです。 ※このオブジェクト名を変更して、さらに上記macroを実行するとエラーとなりますのでどちらかをして下さい。

london1985
質問者

お礼

ご回答いただきまして、ありがとうございます。 原因が判明致しました。 非常にお恥ずかしいのですが、 該当プロシージャを呼び出す順番に問題がございました。 詳細としましては、 別のワークシートに入力した内容(スケジュール表に転記する前の情報)を 今回のvbaよりスケジュール表に転記するようなマクロなのですが、 転記前に「先頭が”祝日”なら・・・」という条件をCallしていた為、 NULLと判断され条件不一致となっておりました。 よって、転記後に同条件のプロシージャをCallすることで、正常に動作するようになりました。 皆様のお手を煩わせてしまい、申し訳ございませんでした。 本当にお恥ずかしいです。。。

  • TAKA_R
  • ベストアンサー率32% (26/79)
回答No.2

ワークシート名のScheduleがうまいこと登録?できていないか、 変えたいセルがactivateされていないのではないでしょうか。 (同じシート内でScheduleを削除したら変化していましたよ) もしかして・・・違うセルを選んでる?

london1985
質問者

お礼

ご回答いただきまして、ありがとうございます。 原因が判明致しました。 非常にお恥ずかしいのですが、 該当プロシージャを呼び出す順番に問題がございました。 詳細としましては、 別のワークシートに入力した内容(スケジュール表に転記する前の情報)を 今回のvbaよりスケジュール表に転記するようなマクロなのですが、 転記前に「先頭が”祝日”なら・・・」という条件をCallしていた為、 NULLと判断され条件不一致となっておりました。 よって、転記後に同条件のプロシージャをCallすることで、正常に動作するようになりました。 皆様のお手を煩わせてしまい、申し訳ございませんでした。 本当にお恥ずかしいです。。。

回答No.1

まず、Scheduleとはなんでしょうか? WorkSheetオブジェクトなら問題なさそうですが。。WorkBookオブジェクトかな? 試しに下記で試すとどうなりますか? With Worksheets("シート名") If Left(.Cells(16, 3).Value, 2) = "祝日" Then .Cells(16, 3).Font.Color = vbBlue .Cells(16, 3).Interior.Color = vbRed End If End With

london1985
質問者

お礼

ご回答いただきまして、ありがとうございます。 原因が判明致しました。 非常にお恥ずかしいのですが、 該当プロシージャを呼び出す順番に問題がございました。 詳細としましては、 別のワークシートに入力した内容(スケジュール表に転記する前の情報)を 今回のvbaよりスケジュール表に転記するようなマクロなのですが、 転記前に「先頭が”祝日”なら・・・」という条件をCallしていた為、 NULLと判断され条件不一致となっておりました。 よって、転記後に同条件のプロシージャをCallすることで、正常に動作するようになりました。 皆様のお手を煩わせてしまい、申し訳ございませんでした。 本当にお恥ずかしいです。。。

london1985
質問者

補足

usb_memoryさん ご回答いただきまして、ありがとうございます。 上記、試してみましたが 動作は変わりませんでした。 >まず、Scheduleとはなんでしょうか? 失礼しました。 こちらはワークシート名になります。

関連するQ&A

  • エクセルVBA 文字の置き換え

    Sub あ() For i = 1 To 100 If Cells(i, 1).Value Like "*解約*" Then Cells(i, 1).Interior.Color = vbRed Next i End Sub A列にA100まで、文章が入っています。 その文章のなかに”解約”という文字の入った文章の入ったセルだけを赤く塗りつぶすマクロ を作りました。 しかし、本当は、”解約”を”解除”という文字に置き換えるマクロが 作りたいのですが、どうしたらいいのでしょうか?

  • うまくできない??NO3

    If Index = 1 Or 6 Or 11 Or 16 Or 21 Then If P1(1).BackColor = vbRed Then P1(1).BackColor = vbBlue Else P1(1).BackColor = vbRed End If If P1(6).BackColor = vbRed Then P1(6).BackColor = vbBlue Else P1(6).BackColor = vbRed End If If P1(11).BackColor = vbRed Then P1(11).BackColor = vbBlue Else P1(11).BackColor = vbRed End If If P1(16).BackColor = vbRed Then P1(16).BackColor = vbBlue Else P1(16).BackColor = vbRed End If If P1(21).BackColor = vbRed Then P1(21).BackColor = vbBlue Else P1(21).BackColor = vbRed End If '-------------------------------------------------------------------- ElseIf Index = 2 Or 7 Or 12 Or 17 Or 22 Then ~~~省略 ElseIf Index = 5 Or 10 Or 15 Or 20 Or 25 Then If P1(5).BackColor = vbRed Then P1(5).BackColor = vbBlue Else P1(5).BackColor = vbRed End If If P1(10).BackColor = vbRed Then P1(10).BackColor = vbBlue Else P1(10).BackColor = vbRed End If If P1(15).BackColor = vbRed Then P1(15).BackColor = vbBlue Else P1(15).BackColor = vbRed End If If P1(20).BackColor = vbRed Then P1(20).BackColor = vbBlue Else P1(20).BackColor = vbRed End If If P1(25).BackColor = vbRed Then P1(25).BackColor = vbBlue Else P1(25).BackColor = vbRed End If End If '--------------------------------------------------------------------- End Sub ※みにくくてすいません リンクを張るのは禁止らしいので・・・できないですね・・・ 関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=418248 関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=418250

  • うまくできない??NO2

    Private Sub P1_Click(Index As Integer) If Index = 1 Or 2 Or 3 Or 4 Or 5 Then If P1(1).BackColor = vbRed Then P1(1).BackColor = vbBlue Else P1(1).BackColor = vbRed End If If P1(2).BackColor = vbRed Then P1(2).BackColor = vbBlue Else P1(2).BackColor = vbRed End If If P1(3).BackColor = vbRed Then P1(3).BackColor = vbBlue Else P1(3).BackColor = vbRed End If If P1(4).BackColor = vbRed Then P1(4).BackColor = vbBlue Else P1(4).BackColor = vbRed End If If P1(5).BackColor = vbRed Then P1(5).BackColor = vbBlue Else P1(5).BackColor = vbRed End If '------------------------------------------------------------------- ElseIf Index = 6 Or 7 Or 8 Or 9 Or 10 Then ~~~~~ 省略 ElseIf Index = 21 Or 22 Or 23 Or 24 Or 25 Then If P1(21).BackColor = vbRed Then P1(21).BackColor = vbBlue Else P1(21).BackColor = vbRed End If If P1(22).BackColor = vbRed Then P1(22).BackColor = vbBlue Else P1(22).BackColor = vbRed End If If P1(23).BackColor = vbRed Then P1(23).BackColor = vbBlue Else P1(23).BackColor = vbRed End If If P1(24).BackColor = vbRed Then P1(24).BackColor = vbBlue Else P1(24).BackColor = vbRed End If If P1(25).BackColor = vbRed Then P1(25).BackColor = vbBlue Else P1(25).BackColor = vbRed End If End If '------------------------------------------------------------------ 続く・・・ 関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=418248

  • VBA ダブルクリックで行に色をつける方法

    VBAでダブルクリックしたセルを含む行に色をつけたいです。 セルに色をつけるマクロは書いた(下記)のですが、これを行全体に色付けしたいのですが、 うまくいきません。 どなたかご教授ください。 Private Sub Worksheet_BeforeDoubleClick _ (ByVal Target As Range, Cancel As Boolean) If Not Application.Intersect _ (Target, Range("A3").CurrentRegion) _ Is Nothing Then With Target.Interior If .Color = vbRed Then .Color = xlNone Else .Color = vbRed End If End With Cancel = True End If End Sub よろしくお願いします。

  • VBA 実行時エラー1004 について

    いつもお世話になります。 作表をしていて、項目に色をつけたいのですが VBA 実行時エラー1004 Rangeメソッドは失敗しました。Globalオブジェクト というエラーが If Range(Cells(5, n - 4)).Interior.Color = RGB(252, 213, 180) Then のところででます。 If Range("Z5").Interior.Color = RGB(252, 213, 180) Then とすると、実行できます。 Sub カラー() Dim n As Long '列番号取得 '最終列取得 n = Cells(5, Columns.Count).End(xlToLeft).Column MsgBox "最終列は" & n   '= 今回は30です。 'セルの色を変える If Range(Cells(5, n - 4)).Interior.Color = RGB(252, 213, 180) Then Range(Cells(3, n - 3), Cells(5, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(39, n - 3), Cells(41, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(68, n - 3), Cells(70, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(104, n - 3), Cells(106, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(133, n - 3), Cells(135, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(169, n - 3), Cells(171, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(198, n - 3), Cells(200, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(234, n - 3), Cells(236, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(263, n - 3), Cells(265, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(299, n - 3), Cells(301, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(329, n - 3), Cells(331, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(365, n - 3), Cells(367, n)).Interior.Color = RGB(230, 184, 183) Else Range(Cells(3, n - 3), Cells(5, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(39, n - 3), Cells(41, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(68, n - 3), Cells(70, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(104, n - 3), Cells(106, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(133, n - 3), Cells(135, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(169, n - 3), Cells(171, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(198, n - 3), Cells(200, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(234, n - 3), Cells(236, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(263, n - 3), Cells(265, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(299, n - 3), Cells(301, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(329, n - 3), Cells(331, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(365, n - 3), Cells(367, n)).Interior.Color = RGB(252, 213, 180) End If End Sub どこが間違っているのか教えていただけないでしょうか? あと、スマートなコードの書き方もお願いします。

  • VBAを使って条件付書式のセルを保護したい

    VBAを使って =A2<>0の条件付書式の入ったセルが 黒塗りのときをロックしたいと思い セルの状態を調べたいのですが FormatConditionsを使えばいいのかと想うのですが 使い方がイマイチわかりません。 たとえば 黒で塗りつぶしたセルを探そうと想ったときは locked_col = RGB(0, 0, 0) cell_col = Worksheets("Sheet1").Cells(j, i).Interior.Color 'セルが黒塗りの場合ロックする If Not cell_col = locked_col Then Cells(j, i).Locked = False End If っていう風にはできないのでしょうか? 知恵をおかしください

  • VBA TimeValue関数が異常

    お願いします・・ 以下の関数が実行できません・・ Sub te() ’’セルには時刻9:59を入れています If Cells(1, 1).Value = TimeValue("9:59") Then Cells(1, 1).Interior.ColorIndex = 6 End If End

  • 【VBA】IF構文の条件式で範囲が同一の場合

    いつもこちらの識者の方々にはお世話になっています。 VBAの質問です。 IF構文でorを使って複数条件を指定したいのですが、下記のような場合、冗長な気がします。 Sub test() IF Left$(Cells(1, 1), 1) = "あ" or Left$(Cells(1, 1), 1) = ”い" or Left$(Cells(1, 1), 1) = ”う" Then Cells(1, 1).EntireRow.Delete End Sub 条件式で範囲が同一の場合、例えば IF Left$(Cells(1, 1), 1) = ”あ","い","う" Then Cells(1, 1).EntireRow.Delete のように、もっとスッキリした記述方法はありますでしょうか。

  • excel vbaについてです

    VBA初心者で、暇な時にいろいろためしています。 以下のマクロを組んだのですが、エラーがでてうまくいきません。 どこがいけないのかご指摘願います。 Sub ather() Dim A As Range Dim B As Range Dim i As Integer With ThisWorkbook.Worksheets("Sheet1") For i = 1 To 30 Set A = Cells(i, 1) Set B = Cells(1, i) If Not .Range(A).Interior.ColorIndex = vbYellow Then GoTo port10 If Not .Range(B).Interior.ColorIndex = vbRed Then GoTo port10 .Range(B).Offset(, 1).Value = "○" port10: Next i End With End Sub イメージとしてはセルの塗りつぶしが黄色で、かつ右隣のセルの塗りつぶしが赤の時に、 赤色セルの右隣のセルに○を表示させようとしているのですが。。。 こうしたらいいんじゃない?といったアドバイスもお願いします(-人-)

  • エクセル2003 VBAマクロにて 背景色 白色の抽出

    エクセル2003のマクロでセル背景色にて抽出したいのですが 背景色が白色(空白)の抽出ができません。 背景色別に 他セルに文字を自動記入したいのですが、 背景色が白(collorindex=0)の認識をしてくれません。 カラーインデックスでは、白は「0」か「2」になっているので その値でマクロを組んでも認識してくれないようです。 どのようにすればよいのでしょうか? 以下に私(素人)のマクロ文(一部)です。ご指摘お願い致します。 Dim 行番号 As Integer 行番号 = 7 Do Until Cells(行番号, 1).Value = "" If Cells(行番号, 9).Interior.ColorIndex = 5 Then Cells(行番号, 14).Value = "3号機"   ElseIf Cells(行番号, 9).Interior.ColorIndex = 7 Then Cells(行番号, 14).Value = "4号機" ElseIf Cells(行番号, 9).Interior.ColorIndex = 0 Then Cells(行番号, 14).Value = "未加工" End If 行番号 = 行番号 + 1 Loop