#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