Как я могу удалить все слева от конкретного символа с помощью VBA? - PullRequest
0 голосов
/ 01 ноября 2019

Итак, мой вопрос заключается в следующем: как мне создать макрос VBA, в котором он автоматически обрезает строку после 6-го _? Под этим я подразумеваю следующее: Example

Как вы можете видеть, оно обрезает все до 6-го _, и это то, чего я хочу достичь с помощью макроса VBA. Аргументация макроса связана с другими отклонениями, которые я добавлю позже для дальнейшей автоматизации. Я знаю, как написать это с формулой Excel, например, так:

=RIGHT(SUBSTITUTE(A16,"_",CHAR(10),6),LEN(A16)-FIND(CHAR(10),SUBSTITUTE(A16,"_",CHAR(10),6),1)+1)

Но я не уверен, как написать это в формате VBA, чтобы он работал правильно. Я попытался имитировать пример с веб-сайта, который я нашел, и это работает только для первого подчеркивания, я пытался изменить его, чтобы он работал правильно, но продолжал сталкиваться с ошибками. Вот код, который я использовал:

Sub Test()

Dim K As Long
Dim LR As Long
LR = Cells(Rows.Count, 1).End(xlUp).Row

For K = 2 To LR
 Cells(K, 2).Value = Right(Cells(K, 1).Value, Len(Cells(K, 1)) - InStr(1, Cells(K, 1).Value, "_"))

Next K

End Sub

Любая помощь будет отличной, и если понадобятся какие-либо разъяснения, я, безусловно, могу предоставить.

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Я думаю, что использование limit аргумента Split здесь может работать хорошо.

Function StripAfter(ByVal txt As String, ByVal delimiter As String, ByVal occurrence As Long) As String
    Dim x As Variant
    x = Split(expression:=txt, delimiter:=delimiter, limit:=occurrence + 1)

    StripAfter = x(UBound(x))
End Function

Вызывается как UDF: =SplitAfter(A1,"_",6).

enter image description here

РЕДАКТИРОВАТЬ:

С вашим текущим кодом, измените:

Cells(K, 2).Value = ...

на

Cells(K, 2).Value = StripAfter(Cells(K, 1).Value, "_", 6)
1 голос
/ 01 ноября 2019

Использование UDF:

Function TruncateString(strIn As String) As String
     Dim words As Variant, wordsout As Variant
     words = Split(strIn, "_")

     ReDim wordsout(0 To UBound(words) - 6)
     For i = 6 To UBound(words)
        wordsout(i - 6) = words(i)
     Next
     TruncateString = Join(wordsout, "_")
End Function

Вы можете использовать это в качестве формулы в своей рабочей книге после сохранения в новом модуле, таком как =TruncateString(A1)

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