Проверьте наличие определенного имени столбца в строке и затем выделите значения в столбце, которые не соответствуют заданному значению в VBA - PullRequest
1 голос
/ 13 марта 2019

Мне нужно искать заданное имя столбца, например, на рисунке, если существует имя столбца «FileNumber». Если он существует, я хочу посмотреть в столбце, чтобы увидеть, все ли числа являются заданным числом (например, это должно быть «101»); если неверно, я хочу выделить это число (здесь выделите «102»)

enter image description here

Как мне добиться этого в 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

1 Ответ

1 голос
/ 13 марта 2019

Используйте Application.WorksheetFunction.Match, чтобы найти номер столбца имени, которое вы ищете. Затем выполните проверки для столбцов.

Вот пример:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...