Excel VBA 質問スレッド №2076 (未解決)

開始日と終了日を比較して警告する。

投稿者 : EXCELビギナー     投稿日時 : 2025/02/05(Wed) 10:04:07     OS : Windows 11     EXCEL : Office 365
はじめまして、EXCELビギナーです。
現在EXCEL(Googleスプレッドシート)を使ってスケジュール表を作成しています。
表の作成で困っているので、助けていただけないでしょうか。
前提条件として、、、

このスケジュール表は各作業者が予定を入力していきます。
そのため、記入はランダムになるため、工程が前後する場合があります。



|名前| |工程| |開始日||終了日|
| a | | 1 | |2月1日||2月2日|
| b | | 1 | |2月2日||2月3日|
| c | | 1 | |2月3日||2月4日|
| b | | 2 | |2月1日||2月3日|
| a | | 3 | |2月4日||2月4日|
| a | | 2 | |2月1日||2月4日|


・やりたいこと
名前「a」の製品は3工程あります。
2工程目の開始日が2/1となっていますが、1工程目の終了日は2/2となっています。
この場合は、エラーで入力拒否もしくは色付け書式でセルに色がつくようにしたいです。

お手数おかけしますが、ご教示いただけますでしょうか。

スポンサーリンク
[返信 1] Re : 開始日と終了日を比較して警告する。
投稿者 : さんこう     投稿日時 : 2025/02/05(Wed) 10:38:21
>エラーで入力拒否もしくは色付け書式でセルに色がつくようにしたいです。

「条件付き書式」で簡単にできましたが、ここはVBAに関する掲示板なので回答は控えます。

VBAで入力拒否するのであれば、こんな感じでしょうか。


Private Sub Worksheet_Change(ByVal Target As Range)
    Set r1 = Intersect(Me.UsedRange, Columns("A"))
    Set r2 = Intersect(Me.UsedRange, Columns("B"))
    Set r3 = Intersect(Me.UsedRange, Columns("D"))
    For Each Rng In Intersect(Me.UsedRange, Columns("C"))
        If WorksheetFunction.CountIfs(r1, Cells(Rng.Row, "A"), r2, "<" & Cells(Rng.Row, "B"), r3, ">=" & Cells(Rng.Row, "C")) Then
            'Rng.Interior.Color = vbYellow
            MsgBox "エラー"
            Application.Undo
        Else
            'Rng.Interior.ColorIndex = xlNone
        End If
    Next
End Sub

[返信 2] Re : 開始日と終了日を比較して警告する。
投稿者 : EXCELビギナー     投稿日時 : 2025/02/05(Wed) 11:16:27
■[返信 1] さんこうさん(2025-02-05 10:38:21)の記事
> >エラーで入力拒否もしくは色付け書式でセルに色がつくようにしたいです。

> 「条件付き書式」で簡単にできましたが、ここはVBAに関する掲示板なので回答は控えます。

> VBAで入力拒否するのであれば、こんな感じでしょうか。


> Private Sub Worksheet_Change(ByVal Target As Range)
> Set r1 = Intersect(Me.UsedRange, Columns("A"))
> Set r2 = Intersect(Me.UsedRange, Columns("B"))
> Set r3 = Intersect(Me.UsedRange, Columns("D"))
> For Each Rng In Intersect(Me.UsedRange, Columns("C"))
> If WorksheetFunction.CountIfs(r1, Cells(Rng.Row, "A"), r2, "<" & Cells(Rng.Row, "B"), r3, ">=" & Cells(Rng.Row, "C")) Then
> 'Rng.Interior.Color = vbYellow
> MsgBox "エラー"
> Application.Undo
> Else
> 'Rng.Interior.ColorIndex = xlNone
> End If
> Next
> End Sub


ご回答有難うございます。VBAでなくても大丈夫です。できれば誰でも編集できるように数式のみで完結する方が助かります。
引き続き回答お待ちしております。

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-02-07 22:41:29 )
タイトルとURLをコピーしました