简体   繁体   中英

Check for a specific column name given a string then highlight values in the column that doesn't match given value in VBA

I need to look for a given column name for example in the picture look if the column name "FileNumber" exists. If it does exist, I want to look in the column to see if the numbers all are a given number (for example it has to be "101"); if incorrect I want to highlight that number (here, highlight "102")

在此处输入图片说明

How can I achieve this in VBA?

Sub FindColumns()  
    Dim rngToSearch As Range
    Dim lookToFind As Variant
    Dim iCtr As Long

    Set rngToSearch = ThisWorkbook.Worksheets("Sheet").Range("A1:C1")

    lookToFind = Array("Filename", "FileNumber", "Author") 'add all Column header that you want to check

    With rngToSearch
        For iCtr = LBound(lookToFind) To UBound(lookToFind)
            If WorksheetFunction.CountIf(rngToSearch, lookToFind(iCtr)) > 0 Then ' Check if column is preset or not
                    MsgBox lookToFind(iCtr) & " Column Found" ' Pop-up msg if column is exist
            Else
                    MsgBox lookToFind(iCtr) & " Column Not Found" ' Pop-up msg if column is Not Found
            End If
        Next
    End With
End Sub

Use Application.WorksheetFunction.Match to find the column number of the name you are looking for. Then do your checkings for the columns.

Here is an example:

Option Explicit

Public Sub ValidateData()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet")

    Dim ColumnNames() As Variant
    ColumnNames = Array("Filename", "FileNumber", "Author") 'add all Column header that you want to check

    Dim Headers As Variant 'read all headers into an array
    Headers = ws.Range("A1", ws.Cells(1, ws.Columns.Count).End(xlToLeft)).Value

    Dim HeaderColumn As Long 'this is the column number where the header was found

    Dim ColName As Variant
    For Each ColName In ColumnNames 'loop through your list of names
        HeaderColumn = 0 'initialize
        On Error Resume Next 'next line throws error if it does not match
        HeaderColumn = Application.WorksheetFunction.Match(ColName, Headers, 0)
        On Error GoTo 0 're-activate error reporting

        If HeaderColumn <> 0 Then
            'header name was found
            MsgBox ColName & " Column found"

            'perform different checks on each column
            Select Case ColName
            Case "FileNumber"
                CheckFileNumberColumn ws.Range(ws.Cells(2, HeaderColumn), ws.Cells(ws.Rows.Count, HeaderColumn).End(xlUp))

            'Case "Author"  'add  other cases as needed
                'CheckAuthorColumn ws.Range(ws.Cells(2, HeaderColumn), ws.Cells(ws.Rows.Count, HeaderColumn).End(xlUp))

            End Select
        Else
            'header name was not found
            MsgBox ColName & " Column not found"
        End If
    Next ColName
End Sub

'this is the procedure to check the FileNumber column
Private Sub CheckFileNumberColumn(DataToValidate As Range)
    Dim iRow As Long
    For iRow = 1 To DataToValidate.Rows.Count
        If DataToValidate.Cells(iRow, 1).Value <> 101 Then
            DataToValidate.Cells(iRow, 1).Interior.Color = RGB(255, 0, 0)
        End If
    Next iRow
End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM