Sub del_zap() '(t1 As String) As String Dim t1 As String, s As Range
'ActiveSheet.Range(Cells(1, 1)).Activate For Each s In ActiveSheet.UsedRange '.SpecialCells(xlCellTypeConstants) 'ActiveSheet.Range(Cells(1, 1)).Select
Set s = Cells.Find(What:=",", After:=ActiveCell, _ LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) If s Is Nothing Then Exit Sub s.Activate
t1 = s.Text
If InStr(1, t1, ",", 1) > 0 Then
Dim d() e = Split(t1, ",") n = 0 For I = LBound(e) To UBound(e) If Trim(e(I)) <> "" Then If n = 0 Then ReDim d(1) n = n + 1 ReDim Preserve d(n) d(n) = Trim(e(I)) End If Next I
s = Mid(Join(d, ", "), 2, Len(Join(d, ",")) + 2)
Else s = t1 End If
Next
End Sub
[/vba]
но, он работает по всему листу, а мне надо его запустить только для определенного столбца к примеру Range("B2:B10000"), какую строчку и куда надо вставить для этого?
Здравствуйте! Уважаемые форумчане помогите подправить макрос Есть задача удалить лишние запятые, дубли и в конце текста, пример:
Sub del_zap() '(t1 As String) As String Dim t1 As String, s As Range
'ActiveSheet.Range(Cells(1, 1)).Activate For Each s In ActiveSheet.UsedRange '.SpecialCells(xlCellTypeConstants) 'ActiveSheet.Range(Cells(1, 1)).Select
Set s = Cells.Find(What:=",", After:=ActiveCell, _ LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) If s Is Nothing Then Exit Sub s.Activate
t1 = s.Text
If InStr(1, t1, ",", 1) > 0 Then
Dim d() e = Split(t1, ",") n = 0 For I = LBound(e) To UBound(e) If Trim(e(I)) <> "" Then If n = 0 Then ReDim d(1) n = n + 1 ReDim Preserve d(n) d(n) = Trim(e(I)) End If Next I
s = Mid(Join(d, ", "), 2, Len(Join(d, ",")) + 2)
Else s = t1 End If
Next
End Sub
[/vba]
но, он работает по всему листу, а мне надо его запустить только для определенного столбца к примеру Range("B2:B10000"), какую строчку и куда надо вставить для этого?pashatank
Я бы немного не так стал делать такую замену (поячеечная работа, в каждой ячейке посимвольная, Сплит-Джойны, редим массива, все это без отключения пересчета и обновления экрана, ... - короче, из пушки по воробьям и работать он у Вас на более-менее нормальном объеме будет долго), но да ладно, что нашли, то нашли. Тем более, что файла-примера нет. По поводу вопроса - замените [vba]
Код
Cells.Find
[/vba] на [vba]
Код
Range("B2:B10000").Find
[/vba]
Я бы немного не так стал делать такую замену (поячеечная работа, в каждой ячейке посимвольная, Сплит-Джойны, редим массива, все это без отключения пересчета и обновления экрана, ... - короче, из пушки по воробьям и работать он у Вас на более-менее нормальном объеме будет долго), но да ладно, что нашли, то нашли. Тем более, что файла-примера нет. По поводу вопроса - замените [vba]
неа, не сработало, выдает run-time error 13 type mismatch дебаг сюда шлет Set s = Range("I2:I100").Find(What:=",", After:=ActiveCell, _ LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) на последнюю строчку
приложил пример
[moder]Нарушение в части тегов п.3 Правил форума. Замечание[/moder]
неа, не сработало, выдает run-time error 13 type mismatch дебаг сюда шлет Set s = Range("I2:I100").Find(What:=",", After:=ActiveCell, _ LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) на последнюю строчку
приложил пример
[moder]Нарушение в части тегов п.3 Правил форума. Замечание[/moder]pashatank
Да нет, я уже при заливке файла столбцы поменял, надо было предупредить
[vba]
Код
Sub del_zap() '(t1 As String) As String Dim t1 As String, s As Range
'ActiveSheet.Range(Cells(1, 1)).Activate For Each s In ActiveSheet.UsedRange '.SpecialCells(xlCellTypeConstants) 'ActiveSheet.Range(Cells(1, 1)).Select
Range("B1:B10000").Find(What:=",", After:=ActiveCell, _ LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) If s Is Nothing Then Exit Sub s.Activate
[/vba]
Ругается либо на sintax error либо на то, что не хватает знака =, помогите понять, что не так?
Да нет, я уже при заливке файла столбцы поменял, надо было предупредить
[vba]
Код
Sub del_zap() '(t1 As String) As String Dim t1 As String, s As Range
'ActiveSheet.Range(Cells(1, 1)).Activate For Each s In ActiveSheet.UsedRange '.SpecialCells(xlCellTypeConstants) 'ActiveSheet.Range(Cells(1, 1)).Select
Range("B1:B10000").Find(What:=",", After:=ActiveCell, _ LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) If s Is Nothing Then Exit Sub s.Activate
[/vba]
Ругается либо на sintax error либо на то, что не хватает знака =, помогите понять, что не так?pashatank
Сообщение отредактировал pashatank - Среда, 22.08.2018, 14:26
А куда Вы Set дели? И да, я не совсем правильно Вам подсказал. Там Вы ж выше еще диапазон определяете. Короче, вот так (принцип работы не менял) [vba]
Код
Sub del_zap() '(t1 As String) As String Dim t1 As String, s As Range For Each s In Range("B2:B77") '.SpecialCells(xlCellTypeConstants) If InStr(s.Value, ",") Then s.Activate t1 = s.Text If InStr(1, t1, ",", 1) > 0 Then Dim d() e = Split(t1, ",") n = 0 For I = LBound(e) To UBound(e) If Trim(e(I)) <> "" Then If n = 0 Then ReDim d(1) n = n + 1 ReDim Preserve d(n) d(n) = Trim(e(I)) End If Next I s = Mid(Join(d, ", "), 2, Len(Join(d, ",")) + 2) Else s = t1 End If End If Next End Sub
[/vba]
А куда Вы Set дели? И да, я не совсем правильно Вам подсказал. Там Вы ж выше еще диапазон определяете. Короче, вот так (принцип работы не менял) [vba]
Код
Sub del_zap() '(t1 As String) As String Dim t1 As String, s As Range For Each s In Range("B2:B77") '.SpecialCells(xlCellTypeConstants) If InStr(s.Value, ",") Then s.Activate t1 = s.Text If InStr(1, t1, ",", 1) > 0 Then Dim d() e = Split(t1, ",") n = 0 For I = LBound(e) To UBound(e) If Trim(e(I)) <> "" Then If n = 0 Then ReDim d(1) n = n + 1 ReDim Preserve d(n) d(n) = Trim(e(I)) End If Next I s = Mid(Join(d, ", "), 2, Len(Join(d, ",")) + 2) Else s = t1 End If End If Next End Sub