Страницы: 1
RSS
Макрос для удаления непечатаемых символов
 
В PLEXе есть функция удаления непечатаемых символов, часто ей пользуюсь в виду специфики подготовки большого объема "правильных" CSV файлов. Мне хотелось бы как то сварганить аналогичный макрос, который можно было бы вынести отдельной кнопкой и который бы работал не с выделенным диапазоном а со всем активным листом, т.е. во всех ячейках на листе убирал НПЧС. Я пытался как то адаптировать, но ввиду абсолютной слабости в программировании не смог. Если поможете буду благодарен.
 
http://www.planetaexcel.ru/techniques/7/191/
 
функцию Replace_symbols  Hugo буквально несколько дней назад запостил...в виде макроса - как-то так...
Код
Function Replace_symbols(ByVal sStr As String) As String    
    Dim i As Byte
    Dim St As String
    St = "*/\:?|""""<>~"  'либо вставьте сюда символы, которые хотите отловить
    For i = 1 To Len(St)
        sStr = Replace(sStr, Mid(St, i, 1), "_")
    Next
    Replace_symbols = sStr
End Function

Sub test()
Dim c As Range
For Each c In ActiveSheet.UsedRange.Cells: c.Value = Replace_symbols(c.Value): Next
End Sub   
без файла - протестировать не возможно !!
Изменено: JeyCi - 30.03.2015 08:48:54
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Сделал вот так
Код
Sub test()
Dim c As Range
For Each c In ActiveSheet.UsedRange.Cells: c.Value = WorksheetFunction.Clean(c.Value): Next
End Sub
 
Зачем нужен цикл? Можно так:
Код
Sub test()
    ActiveSheet.UsedRange.Value = Application.Clean(ActiveSheet.UsedRange.Value)
End Sub
Чем шире угол зрения, тем он тупее.
 
Цитата
SAS888 написал: Зачем нужен цикл?
ну вообще да. не шарю потому что) спасибо
 
хм.. странно, в однном файле работает, в другом - Type mismatch
прилагаю файл с ошибкой
 
Попробуйте:
Код
Sub NPC_del()
    ActiveSheet.UsedRange.SpecialCells(2).Value = Application.Clean(ActiveSheet.UsedRange.SpecialCells(2).Value)
End Sub
Изменено: KuklP - 30.03.2015 14:53:57
Я сам - дурнее всякого примера! ...
 
нет. после этого в других файлах беда получается
 
Тогда так:
Код
Sub NPC_del()
    Dim a As Range
    On Error Resume Next
    For Each a In ActiveSheet.UsedRange.SpecialCells(2).Areas
        a.Value = Application.Clean(a.Value)
    Next
End Sub
Я сам - дурнее всякого примера! ...
 
Вот так работает
Код
Sub NPC_del()
    ActiveSheet.UsedRange.Value = Application.Clean(ActiveSheet.UsedRange)
End Sub
 
Леш, так убьет все формулы.
Я сам - дурнее всякого примера! ...
 
Цитата
Казанский написал: Вот так работает
да, к сожалению убивает и при фильтре не работает! получается ерунда. PLEXовая работает хорошо, но она для выделенного диапазона, а когда куча файлов хочется чтоб сразу для всего листа.
 
Серж, в примере из #7 формул не было. И ТС не пояснил, что именно за "беда".
Но факт: функция Clean не хавает большой МАССИВ, а ДИАПАЗОН может быть какого угодно размера. Так же ведет себя Transpose. По кр. мере до 2007 включительно. Итого:
Код
Sub NPC_del()
    Dim a As Range
    On Error Resume Next
    For Each a In ActiveSheet.UsedRange.SpecialCells(2).Areas
        a.Value = Application.Clean(a)
    Next
End Sub
 
Добрый день! Для очистки текста от всего лишнего я ищу в каждой ячейке коды символов
Код
If Asc(s) < 48 Or Asc(s) > 57 And Asc(s) < 65 Or Asc(s) > 90 And Asc(s) < 97 Or Asc(s) > 122 And Asc(s) < 192 Then
и, Если их нахожу, то заменяю на "пусто"  replace-ом. Подскажите, пожалуйста, можно ли в vba как-то по удобнее обозначать диапазоны? (если, к примеру, у меня в 2 раза больше диапазонов) ?
 
Чем Вас не устраивает предыдущий пример от Казанского?
Я сам - дурнее всякого примера! ...
 
Устраивает)) просто хочу получить ответ на данный вопрос)) как более удобно (если это возможно) записывать диапазоны...(как мне кажется диапазоном легче охватить все непечатаемые символы, да и в других случаях объединение диапазонов может пригодиться)
Изменено: Ves - 22.04.2015 22:06:52
Страницы: 1
Наверх