Определение строкового шаблона в Excel VBA - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь определить столбец, в котором есть особая строка. Для простоты вопроса здесь приведен небольшой размер выборки столбца, с которым я работаю.

pic1

Столбец содержит имена людей, но мы видим, что некоторые записи имеют специальный идентификатор ключа в последних 7-8 цифрах ячейки. Меня интересуют те, которые начинаются с заглавной буквы "C", за которой следуют 6 цифр.

Я пытаюсь получить результаты, подобные этому.

pic2

Столбец B (идентификатор кабины) просто берет 7 цифр справа, что легко делается с помощью функций Excel в VBA. Я пытаюсь получить столбец C (Флаг), где я определяю, являются ли они интересующими меня записями, которые начинаются с заглавной буквы "C" и сопровождаются 6 цифрами. Если они есть, я отмечаю их как «Y», иначе «N».

Если потребуется добавить какие-либо дополнительные сведения, дайте мне знать, и я как можно скорее отредактирую вопрос.

Ответы [ 3 ]

0 голосов
/ 09 января 2019

Используйте следующую формулу в столбце C: =IFERROR(IF(AND(MID(A2,FIND("*",A2)+1,1)="C",LEN(A2)-(FIND("*",A2)+1)=6),"Y","N"),"N")

Альтернатива: Поместите эту формулу в столбец B
=IFERROR(IF(AND(MID(A2,FIND("*",A2)+1,1)="C",LEN(A2)-(FIND("*",A2)+1)=6),MID(A2,FIND("*",A2)+1,7),""),"")

и эта формула в столбце C
=IF(LEN(B2)<>0,"Y","N")

0 голосов
/ 09 января 2019

Вы также можете напрямую использовать приведенную ниже формулу Excel. Эта формула может быть использована в коде VBA после небольшой модификации.

=IF(COUNT(FIND({0,1,2,3,4,5,6,7,8,9},A2))=0,"N",IF(EXACT(LEFT(B2,1),"C"),"Y","N"))

Примечание: A2 - это ячейка, в которой содержатся ваши данные, например: Joe * C5464647. Пожалуйста, обратитесь к снимку.

Снимок Excel с данными

0 голосов
/ 09 января 2019

без RegExp

Проверяет, является ли первый из последних семи символов заглавной "C". Если так, проверяет, являются ли последние 6 символов числовыми. Только тогда возвращается «Y».

Код

Sub LeftRightArray()

    Const cSheet1 As Variant = "Sheet1"  ' Sheet Name/Index
    Const cFirst As Integer = 2          ' Source First Row
    Const cSourceC As Variant = "A"      ' Source Column
    Const cTargetC As Variant = "B"      ' Target Column
    Const cSearch As String = "C"        ' Search String

    Dim lastR As Long     ' Source Last Row Number
    Dim i As Long         ' Array Row Counter
    Dim j As Integer
    Dim vnt As Variant    ' Array
    Dim strCompare        ' Compare String

    ' Paste Source Range into Array
    With Worksheets(cSheet1)
        lastR = .Cells(.Rows.Count, cSourceC).End(xlUp).Row
        vnt = .Range(.Cells(cFirst, cSourceC), .Cells(lastR, cSourceC))
    End With

    ' Change data in Array.
    For i = 1 To UBound(vnt)
        ' Check if C is the first char of last 7 chars.
        If Left(Right(vnt(i, 1), 7), 1) = cSearch Then
            ' Check if last 6 chars are numeric.
            If IsNumeric(Right(vnt(i, 1), 6)) Then
                vnt(i, 1) = "Y"
              Else
                vnt(i, 1) = "N"
            End If
          Else ' C is not the first letter of last 7 chars.
            vnt(i, 1) = "N"
        End If
    Next

    ' Paste Array into Target Range
    With Worksheets(cSheet1).Cells(cFirst, cTargetC)
        .Resize(UBound(vnt), UBound(vnt, 2)) = vnt
    End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...