Excel - データ検証式

問題

出席を追跡するスプレッドシートがあります。 私がやりたいことは、 3つ以上のセルが連続して同じデータを含んでいるときはいつでもユーザーに警告することです。 例えば。 誰かが病気になった場合、Sがセルに配置され、この人が病気の場合は月曜日、火曜日、水曜日に、ユーザーに警告します。 (同じデータで3日連続)。 その人がThurも病気である場合、私は再びユーザーに警告したいです。

溶液

  • 1. VBEを開くために、F11キーを押します。
  • 2.プロジェクトエクスプローラを開くために、Ctrl + Rキーを押します。
  • 3.このメッセージボックスが欲しいシートをダブルクリックします。
  • 4.コードを貼り付けます

 Private Sub Worksheet_Change(ByValターゲットを範囲として)Dim vPosをバリアントとしてDim iColを整数としてDim CellValueとしてVariant((Target.Columns.Count = 1)And(Target.Rows.Count = 1))Then If Target = ""その後vPos = ""の場合は終了サブ終了UCase(Cell) "S"の場合はターゲットの各セルに対してApplication.EnableEvents = Falseの場合GoTo Next_Cell vPos = "" iCol = Cell.Column iCol> = 3の場合次に((Cell = Cell) .Offset(0、-2))And(Cell.Offset(0、-1)= Cell))then vPos = -1 If If If((vPos = "")And(iCol> = 2)And(( iCol <Columns.Count))If((Cell = Cell.Offset(0、-1))And(Cell.Offset(0、1)= Cell))Then vPos = 0 If If If((vPos = "()And(iCol <Columns.Count - 1))If((Cell = Cell.Offset(0、1))And(Cell.Offset(0、2)= Cell))そしてvPos = 1 End If End If(vPos "")の場合GoTo End_Sub End Next_Cellの場合:Next End_Sub:Application.EnableEvents = True(vPos ""の場合)MsgBox "Three in a row" End If End Sub 

アラートが平日(月曜日から金曜日)にのみ有効にされる場合。

 プライベートサブワークシート変更(範囲としてのByValターゲット)整数としてのディムvPosディマとしてのディムiColとしてのディムvimosとしてのディムiOffsetL2としてのディムiOffsetR1としてのディムとしてのディムiOffset2としてのディムCellとしてのディムCellL2としてのディムvPosバリアントとしてCellR1がバリアントとしてCellR2((Target.Columns.Count = 1)And(Target.Rows.Count = 1))ターゲット= ""の場合サブルーチン終了vPos = ""の場合サブルーチン終了エラーGoTo End_Sub Application.EnableEvents = Falseターゲットの各セルCell0 = UCase(Cell.Value) 'Cell0 "S"の場合GoTo Next_Cell vPos = "" iOffsetL2 = 0 iOffsetL1 = 0 iOffsetR1 = 0 iOffsetR2 = 0 iOffsetR2 = 0 iCol = Cell.Column If (IsDate(Cells(1、iCol)))次にCellL2 = "ゴミ値" CellL1 = "ゴミ値" CellR1 = "ゴミ値" CellR2 = "ゴミ値"を選択(平日(Cells(1、iCol)、vbMonday)) Case Is = 1 iOffsetL2 = -2 iOffsetL1 = -2 iOffsetR1 = 0 iOffsetR2 = 0 Case Is = 2 iOffsetL2 = -2 iOffsetL1 = 0 iOffsetR1 = 0 iOffsetR2 = 0 4 iOffsetL2 = 0 iOffsetL1 = 0 iOffsetR1 = 0 iOffsetR2 = 2 Case Is = 5 iOffsetL2 = 0 iOffsetR1 = 2 iOffsetR2 = 2 iOffsetR2 = 2終了選択時にエラーが発生した場合次の終了値CellL1 = Cell.Offset(0、( - 1 + iOffsetR1))値CellR1 = Cell.Offset(0、(1 + iOffsetR1))値CellR2 = Cell.Offset(0、(2 + iOffsetR2))エラー時の値GoTo End_Sub CellL2 = UCase(CellL2)CellL1 = UCase(CellL1)CellR1 = UCase(CellR1)CellR2 = UCase(CellR2)もし(iCol + iOffsetL2> 2)ならば? ? X If(((CellL2 = Cell0)And(CellL1 = Cell0))then vPos = -1 GoTo End_Sub If If((iCol + iOffsetL1> 0)And((iCol - iOffsetR1)<Columns.Count))Then ' ? バツ ? If((CellL1 = Cell0)And(Cell0 = CellR1))の場合vPos = 0 GoTo End_Sub Endの場合If(iCol <Columns.Count - 1)の場合 ? ((Cell0 = CellR1)And(Cell0 = CellR2))の場合vPos = 1 GoTo End_Sub Endの場合Next_Cell:Next End_Sub:Application.EnableEvents = Trueの場合(vPos "")MsgBox "Three in row" End If終了サブ 

このヒントを寄せてくれたrizvisa1に感謝します。

前の記事 次の記事

トップのヒント