Удалить все, что начинается с любого di git в листе Excel - PullRequest
1 голос
/ 23 апреля 2020

Я должен удалить что-либо из значений ячеек, которые начинаются с любого ди git (0-9). Например, ячейка A1 имеет значения: afhd21ffh, 126467, hgdasj12jg, 86589, 0186253, выходные данные должны быть afhd21ffh, hgdasj12jg.

Я много искал и пытался найти решение, но не смог найти эффективное.

Ответы [ 3 ]

2 голосов
/ 23 апреля 2020

Довольно сложная формула:

=TEXTJOIN(",",1,FILTERXML("<t><s>"&SUBSTITUTE(A1,",","</s><s>")&"</s></t>","//s[not(number(substring(.,1,1)+1))]"))

Результат:

enter image description here


"//s[not(number(substring(.,1,1)+1))]" буквально берет подстроку всех узлов с 1-й позиции слева и проверяет, не является ли это число, когда мы добавляем к нему 1. Это XPATH 1.0 решение найдено здесь

Примечание: Это формула массива, которую необходимо подтвердить с помощью Ctrl Shift Ввод

2 голосов
/ 23 апреля 2020

Попробуйте использовать TEXTJOIN + FILTER XML, функция которого TEXTJOIN () доступна в Office 365

В B1, введите формулу массива (Ctrl + shift + Enter):

=TEXTJOIN(", ",1,FILTERXML("<a><b>"&SUBSTITUTE(A1,",","</b><b>")&"</b></a>","//b[.*0!=0]"))

enter image description here

2 голосов
/ 23 апреля 2020

Ниже представлен небольшой VBA pro c, который берет содержимое ячейки A1 и удаляет все значения, начинающиеся с числа, обрабатывая начальный пробел для каждого значения, прежде чем выводить его обратно на лист:

Sub sRemoveNumbers()
    Dim aData() As String
    Dim lngLoop As Long
    Dim strOutput As String
    aData() = Split(Range("A1").Value, ",")
    For lngLoop = LBound(aData) To UBound(aData)
        If IsNumeric(Left(Trim(aData(lngLoop)), 1)) = False Then
            strOutput = strOutput & aData(lngLoop) & ","
        End If
    Next lngLoop
    If Right(strOutput, 1) = "," Then strOutput = Left(strOutput, Len(strOutput) - 1)
    If Left(strOutput, 1) = "," Then strOutput = Mid(strOutput, 2)
    Range("A2") = strOutput
End Sub

С уважением,

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