Excel - Adatellenőrzési képlet

Probléma

Van egy elterjedt lap, amely nyomon követi a látogatást. Azt akarom, hogy figyelmeztessem a felhasználót, ha 3 VAGY TOVÁBB SÁRGA VAGY A SEM ADATOKAT TARTALMAZZA . például. Ha valaki betegnek hív, akkor egy S kerül a cellába, ha ez a beteg beteg Mon, Tue, Wed, figyelmeztetni szeretném a felhasználót. (3 nap egymás után azonos adatokkal). Ha a beteg Thur-ban is beteg, újra szeretném figyelmeztetni a felhasználót.

Megoldás

  • 1. Nyomja meg az ALT + F11 gombot a VBE megnyitásához
  • 2. Nyomja meg a CTRL + R gombot a Project Explorer megnyitásához
  • 3. Kattintson duplán arra a lapra, amelyben ezt az üzenetmezőt szeretné
  • 4. Illessze be a kódot

 Privát Sub Worksheet_Change (ByVal Target As Range) Dim vPos Mint Változat Dim iCol mint Integer Dim CellValue Változatként Ha ((Target.Columns.Count = 1) és (Target.Rows.Count = 1)) Akkor, ha Target = "" Kilépés az alvégből Ha vPos = "" Application.EnableEvents = Hamis minden egyes cella cellához Ha UCase (Cell) "S", akkor GoTo Next_Cell vPos = "" iCol = Cell.Column If iCol> = 3 Ezután ha ((Cell = Cell .Offset (0, -2)) És (Cell.Offset (0, -1) = Cell)) Ezután vPos = -1 Vége Ha vége Ha Ha ((vPos = "") És (iCol> = 2) És ( iCol <Columns.Count)) Ezután ha ((Cell = Cell.Offset (0, -1)) és (Cell.Offset (0, 1) = Cell)) Ezután vPos = 0 Vége Ha vége Ha Ha ((vPos = "") És (iCol <Columns.Count - 1)) Akkor ha ((Cell = Cell.Offset (0, 1)) és (Cell.Offset (0, 2) = Cell)) Ezután a vPos = 1 vége, ha véget ér Ha a (vPos) ") akkor GoTo End_Sub End Ha Next_Cell: Next End_Sub: Application.EnableEvents = Igaz, ha (vPos" ") Ezután MsgBox" Három egymás után "Vége Ha vége 

Ha a figyelmeztetéseket csak hétköznap (hétfőtől péntekig) engedélyezi.

 Privát Sub Worksheet_Change (ByVal Target As Range) Dim vPos Mint Változat Dim iCol As Integer Dim CellValue Mint Változat Dim iOffsetL2 Mint Integer Dim iOffsetL1 Mint Integer Dim iOffsetR1 Integer Dim iOffset2 Integer Dim CellL2 mint Változat Dim CellL1 Mint Változat Dim CellL1 CellR1 mint változata Dim CellR2 mint változata Ha ((Target.Columns.Count = 1) és (Target.Rows.Count = 1)) Ezután, ha a Target = "" majd kilép az alvégből, ha vPos = "" 'Kilépés Sub On Error GoTo End_Sub Application.EnableEvents = Hamis minden cella cellához Cell0 = UCase (Cell.Value) Ha Cell0 "S" akkor GoTo Next_Cell vPos = "" iOffsetL2 = 0 iOffsetL1 = 0 iOffsetR1 = 0 iOffsetR2 = 0 iCol = Cell.Columból Ha (IsDate (cellák (1, iCol))) Ezután CellL2 = "Szemétérték" CellL1 = "Szemétérték" CellR1 = "Szemétérték" CellR2 = "Szemetes érték" Válassza ki az esetet (hétköznap (cellák (1, iCol), vbMonday) ) Eset = 1 iOffsetL2 = -2 iOffsetL1 = -2 iOffsetR1 = 0 iOffsetR2 = 0 eset = 2 iOffsetL2 = -2 iOffsetL1 = 0 iOffsetR1 = 0 iOffsetR2 = 0 eset = = 4 iOffsetL2 = 0 iOffsetL1 = 0 iOffsetR1 = 0 iOffsetR2 = 2 eset = 5 iOffsetL2 = 0 iOffsetL1 = 0 iOffsetR1 = 2 iOffsetR2 = 2 Vég kiválasztása Vége Ha bekapcsolt hiba folytatása Következő CellL2 = Cell.Offset (0, (-2 + iOffsetL2 Érték CellL1 = Cell.Offset (0, (-1 + iOffsetL1)) Érték CellR1 = Cell.Offset (0, (1 + iOffsetR1)) Érték CellR2 = Cell.Offset (0, (2 + iOffsetR2)) ) .Value értéke GoTo End_Sub CellL2 = UCase (CellL2) CellL1 = UCase (CellL1) CellR1 = UCase (CellR1) CellR2 = UCase (CellR2) Ha (iCol + iOffsetL2> 2) Ezután? ? X Ha ((CellL2 = Cell0) és (CellL1 = Cell0)) Ezután vPos = -1 GoTo End_Sub End Ha vége Ha Ha ((iCol + iOffsetL1> 0) és ((iCol - iOffsetR1) <OszlopokCount)) Ezután ' ? X ? Ha ((CellL1 = Cell0) és (Cell0 = CellR1)) Ezután vPos = 0 GoTo End_Sub End Ha vége Ha If (iCol <Columns.Count - 1) Aztán 'X? ? Ha ((Cell0 = CellR1) és (Cell0 = CellR2)) Ezután vPos = 1 GoTo End_Sub End Ha vége Ha Next_Cell: Next End_Sub: Application.EnableEvents = True If (vPos) "Majd MsgBox" Három egymás után "Vége Ha Vége vége 

Ennek köszönhetően a rizvisa1 .

Előző Cikk Következő Cikk

Top Tippek