Как удалить несколько символов в строке в Excel

#excel #vba #data-cleaning

#excel #vba #очистка данных

Вопрос:

У меня есть несколько тысяч строк, которые я хотел бы очистить. Я хотел бы удалить все повторяющиеся запятые и заменить их только одной запятой. Я использую Excel. Примеры могут быть приведены ниже

Текущие данные Желаемый результат
,,,,,,,,,,
один,,,,,, два,,,,, три один, два, три
два,,,, один,,,,,, два, один
два,,, один, один, два,,, один два, один, один, два, один

Комментарии:

1. Попробуйте функцию substitute() .

2. Один из способов — преобразовать текст в столбцы, разделенные запятой. Затем сохраните как файл csv. Теперь ваши данные чистые, между значениями всего одна запятая. Если у вас есть другие столбцы, то этот вариант не является оптимальным. Другой вариант — выполнить поиск / замену… найдите 2 запятых и замените на 1, найдите 3 и замените на 1 и так далее. Если у вас есть только 10 или около того вариантов, то это быстро.

3. Регулярное выражение — полезный инструмент.

4. Do While Instr(txt, ",,")>0: txt = Replace(txt, ",,", ","): Loop

Ответ №1:

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

 Sub test()
    Dim vDB As Variant
    Dim vResult() As Variant
    Dim i As Long, r As Long
    Dim str As String
    
    vDB = Range("a1", Range("a" amp; Rows.Count).End(xlUp))
    
    r = UBound(vDB, 1)
    
    ReDim vResult(1 To r, 1 To 1)
    For i = 1 To r
        str = vDB(i, 1)
        vResult(i, 1) = myresult(str)
    Next i
    Range("b1").Resize(r) = vResult
End Sub

Function myresult(str As String)
    Dim vR(), vS, v
    Dim n  As Integer
    vS = Split(str, ",")
     For Each v In vS
        If v <> "" Then
            n = n   1
            ReDim Preserve vR(1 To n)
            vR(n) = v
        End If
    Next v
    If n Then
       myresult = Join(vR, ", ")
    Else
        myresult = ""
    End If
End Function
 

введите описание изображения здесь