I would like to understand how I can check for a specific pattern in excel using VB script or functions.
The objective is to filter out the MAC which doesn't have a timestamp with exact 30 minute intervals. The accepted entries are only xx:00:00:00:00 or xx:30:00:00:00. Any other MAC with a different timestamp needs to be filtered out. For instance, In the below case, I need to filter out row numbers 8,9 and 10. Would you suggest using Regular expression Excel macro or a excel formula that is even simpler? ( eg: COUNTIF or COUNTIFS)?
CodePudding user response:
If your column P is a real numeric date/time format
Use the following forumula in a helper column
=IF(AND(OR(MINUTE(P2)=0,MINUTE(P2)=30),SECOND(P2)=0),"OK","Sort Out")
and filter that helper column by OK.
If column P is text
Use the following formula in a helper column
=IF(AND(OR(VALUE(MID(P2,15,2))=0,VALUE(MID(P2,15,2))=30),VALUE(MID(P2,18,2))=0),"OK","Sort Out")
and filter that helper column by OK.
CodePudding user response:
If, looking to the rows you say to be eliminated, I correctly understood what you need, please try the next VBA solution:
Sub eliminateSomeRows()
Dim sh As Worksheet, lastR As Long, arrP
Dim rngDel As Range, i As Long, arrCh
Set sh = ActiveSheet
lastR = sh.Range("P" & sh.rows.count).End(xlUp).row
arrP = sh.Range("P2:P" & lastR).value
For i = 1 To UBound(arrP)
arrCh = Split(arrP(i, 1), ":")
If (arrCh(1) <> "00" And arrCh(1) <> "30") Or _
left(arrCh(2), 2) <> "00" Then
If rngDel Is Nothing Then
Set rngDel = sh.Range("P" & i 1)
Else
Set rngDel = Union(rngDel, sh.Range("P" & i 1))
End If
End If
Next i
If Not rngDel Is Nothing Then rngDel.EntireRow.Select
End Sub
It will (only) select the rows to be deleted. If you are satisfied with the result, please replace Select, in the last code line, with Delete.
The code should be very fast, using arrays and working in memory, the rows deletion being done at once...

