Форматирование ячеек для отображения символов только после числа Х символов - PullRequest
0 голосов
/ 18 марта 2019

Вместо того, чтобы получать первые 12 символов справа, нужна та же самая ячейка без первых 12 символов.

Dim arrData As Variant, LastRow As Long, i As Long, ws As Worksheet

    Set ws = ThisWorkbook.Sheets("Long List 15032019") 'change the name of the sheet to the one you are doing the code

    With ws
        LastRow = .Cells(.Rows.Count, 3).End(xlUp).Row
        arrData = .Range("A2", .Cells(LastRow, "C")).Value
        For i = 1 To UBound(arrData)
            If arrData(i, 3) Like "Bus*" Then
                arrData(i, 1) = "BU CRM"
            Else
                arrData(i, 1) = "CSI ACE"
            End If
            If arrData(i, 3) Like "CSI*" Or arrData(i, 3) = vbNullString Then
                arrData(i, 2) = vbNullString
                Else: arrData(i, 2) = Right(arrData(i, 3), 12)
            End If
        Next i
        .Range("A2", .Cells(LastRow, "C")).Value = arrData

         End With

т.е. Если C3 = "Пример (ID: 15654534)", то B3 = "(ID: 15654534)" или Если C3 = "Пример (ID: 152)", тогда B3 = "(ID: 152)"

Я пытался использовать Left или -12. Но результат оказался не тем, что мне было нужно. Я надеюсь, что это проясняет мой вопрос.

Спасибо

Ответы [ 2 ]

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

Похоже, вы хотите регулярное выражение. В этом случае у вас будет

arrData(i,2) =  GetId(arrData(i, 3) , "ID:\d+")

Код:

Option Explicit

Public Sub test()
    Dim items(), item As Variant
    items = Array("Example (ID:15654534)", "Example (ID:152)")
    For Each item In items
        Debug.Print GetId(item, "ID:\d+")
    Next
End Sub
Public Function GetId(ByVal inputString As String, ByVal sPattern As String) As String
    Dim matches As Object, iMatch As Object, arrMatches(), i As Long
    i = 1
    With CreateObject("vbscript.regexp")
        .Global = True
        .MultiLine = True
        .IgnoreCase = True
        .Pattern = sPattern
        If .test(inputString) Then
            Set matches = .Execute(inputString)
            ReDim arrMatches(1 To matches.Count)
            For Each iMatch In matches
                arrMatches(i) = iMatch.Value
                i = i + 1
            Next iMatch
        Else
            GetId = "No match"
            Exit Function
        End If
    End With
    GetId = arrMatches(1)
End Function
0 голосов
/ 18 марта 2019

Это может быть сделано без VBA, но только если входные данные имеют ту же структуру.Теперь ваши данные:

текст (idnumber) , и вы хотите получить только часть (idnumber ), включая обе скобки.

Эта формула будет работать ТОЛЬКО до тех пор, пока структура данных одинакова .Если ввод что-то меняет, он не может работать должным образом (например, если первая скобка отсутствует, он не будет работать должным образом).

Я использовал следующую формулу:

=MID(C1;SEARCH("(";C1;1);SEARCH(")";C1)-SEARCH("(";C1;1)+1)

Пример моих данных:

enter image description here

Надеюсь, вы сможете адаптировать его под свои нужды.

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