Удалить символы до и после специального символа VBA - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть набор данных со строками, такими как, 1782_eqjobs.hostname, 519_fid_quant.hostname.

Я хочу, чтобы все символы содержались в первых символах '_' и '.', А затем удалялись остальные.

Например;

1782_eqjobs.hostname -> eqjobs

519_fid_quant.hostname -> fid_quant

Можно ли использовать макрос для этого?

Ответы [ 4 ]

0 голосов
/ 08 ноября 2018

Вы можете использовать функцию рабочего листа, либо в рабочем листе, либо в VBA.

Предположим, что ваши строки находятся в диапазоне A1.

Функция в ячейке будет выглядеть так:

=MID(A1,FIND("_",A1,1)+1,(FIND(".",A1,1)-FIND("_",A1,1))-1)

Чтобы использовать его в VBA, вы должны добавить:

worksheetfunction.MID(A1,FIND("_",A1,1)+1,(FIND(".",A1,1)-FIND("_",A1,1))-1)

Надеюсь, это поможет!

Phil

0 голосов
/ 08 ноября 2018

Может быть ..

Sub CleanUp()
    On Error Resume Next
    For Each c In Selection
        c.Value = Mid(c.Value, InStr(1, c.Value, "_") + 1, InStr(1, c.Value, ".") - InStr(1, c.Value, "_") - 1)
    Next c
End Sub
0 голосов
/ 08 ноября 2018

Эта простая формула сделает это:

=MID(LEFT(A1,FIND(".",A1)-1),FIND("_",A1)+1,LEN(A1))

enter image description here

0 голосов
/ 08 ноября 2018

Вы можете использовать шаблон регулярного выражения

_(.*)\.

и затем извлеките группу 1 из совпадения. Это немного хрупко, поскольку основано на том, что все строки находятся в предоставленном вами макете, без нескольких экземпляров _ some text .

Попробуйте

Я имею в виду реализацию, такую ​​как:

Option Explicit
Public Sub test()

    Debug.Print GetString("1782_eqjobs.hostname")

End Sub

Public Function GetString(ByVal inputString As String) As Variant
    Dim matches As Object

    With CreateObject("vbscript.regexp")
        .Global = True
        .MultiLine = True
        .IgnoreCase = True
        .Pattern = "_(.*)\."
        If .test(inputString) Then
            Set matches = .Execute(inputString)
            GetString = matches(0).SubMatches(0)
            Exit Function
        End If
    End With
    GetString = CVErr(xlErrNA)
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...