Проверка наличия заголовка в списке столбцов - Excel vba - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь определить, есть ли у столбца заголовок или нет, через VBA. Обычно в столбце будут данные, соответствующие неизвестному, но идентичному шаблону регулярного выражения. Мой план - проверить, имеет ли A2 строку регулярного выражения того же типа, что и A1. Скорее всего, это будет тот же идентификатор + 1. Например

A1 = X001

A2 = X002

Func IsHeader("A") = True

A1 = ID's

A2 = X001

Func IsHeader("A") = False

У меня есть идея использовать существующий скрипт, который я сделал для генерации шаблона регулярного выражения на основе входной буквенно-цифровой строки, но я ' Мне интересно узнать, какие еще идеи / способы могут быть у людей для решения проблемы. Я понимаю, что кода не так много, но я знаю, что могу это сделать, и сейчас работаю над этим. Если вам не интересно отвечать, ничего страшного!

Обновление: опубликован ответ, но я ищу больше, чем обзор кода, поскольку я понимаю, что для этого есть обмен. Хотелось бы узнать, как лучше достичь цели с другим вектором атаки.

1 Ответ

0 голосов
/ 14 июля 2020

Вот что у меня получилось! Я не уверен, что SO думает о проверке кода, но мне интересно, что думают люди и как еще они могут «снять шкуру с кошки», поэтому, пожалуйста, не стесняйтесь публиковать ответ.

Sub Test()

If IsHeader = True Then
 MsgBox "Has Header"
Else
 MsgBox "No Header"
End If

End Sub

Public Function IsHeader() As Boolean

 A1Pattern = RegExPattern(Range("A1").Value)
 A2Pattern = RegExPattern(Range("A2").Value)

If A1Pattern = A2Pattern Then
 IsHeader = True
End If

End Function


Public Function RegExPattern(my_string) As String
RegExPattern = ""
'''Special Character Section'''
Dim special_charArr() As String
Dim special_char As String

special_char = "!,@,#,$,%,^,&,*,+,/,\,;,:"
special_charArr() = Split(special_char, ",")
'''Special Character Section'''

'''Alpha Section'''
Dim regexp As Object
Set regexp = CreateObject("vbscript.regexp")

Dim strPattern As String
strPattern = "([a-z])"

With regexp
    .ignoreCase = True
    .Pattern = strPattern
End With
'''Alpha Section'''

Dim buff() As String
'my_string = "test1*1#"
ReDim buff(Len(my_string) - 1)
Dim i As Variant
For i = 1 To Len(my_string)
    buff(i - 1) = Mid$(my_string, i, 1)
    char = buff(i - 1)
    If IsNumeric(char) = True Then
        'MsgBox char & " = Number"
        RegExPattern = RegExPattern & "([0-9])"
    End If
    For Each Key In special_charArr
     special = InStr(char, Key)
      If special = 1 Then
        If Key <> "*" Then
            'MsgBox char & " = Special NOT *"
            RegExPattern = RegExPattern & "^[!@#$%^&()].*$"
        Else
            'MsgBox char & " = *"
            RegExPattern = RegExPattern & "."
        End If
      End If
    Next
    If regexp.Test(char) Then
        'MsgBox char & " = Alpha"
        RegExPattern = RegExPattern & "([a-z])"
    End If
Next
'RegExPattern = Chr(34) & RegExPattern & Chr(34)
'MsgBox RegExPattern
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...