Имя: Пароль:
IT
IT-новости
Excel узнать, есть ли в данных символы, кроме указанных
,
0 Adgjj
 
10.02.15
10:07
Допустимые символы в текстовых данных экселя:
a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 / - ? : ( ) . , ' +

Нужно найти другие символы или определить, что все символы являются допустимыми.
1 Ненавижу 1С
 
гуру
10.02.15
10:12
каждый символ данных ищешь в строке "a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 / - ? : ( ) . , ' + " (без пробелов только)
если не находится, то это недопустимый символ
2 Cube
 
10.02.15
10:12
(0) Держи нас в курсе.
3 Adgjj
 
10.02.15
10:15
В эксель-файле много столбцов и очень много строк. Надо как-то быстро проверить.
4 polosov
 
10.02.15
10:17
(3) Скоро только кошки родятся(с)
Читай файлик и сравнивай.
5 Adgjj
 
10.02.15
10:27
мне нужно не программныv путем, а с помощью функций экселя. Т.к. инф-ция из SAP.
6 b_ru
 
10.02.15
10:35
Sub Check()
    Symbols = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/-?:().,'+ "
    
    res = ""
    
    For Each cell In ActiveSheet.UsedRange
        For i = 1 To Len(cell.Text)
            s = Mid(cell.Text, i, 1)
            If InStr(1, Symbols, s) = 0 Then
                res = res & "R" & cell.Row & "C" & cell.Column & ": недопустимый символ " & s & vbCrLf
                Exit For
            End If
        Next i
    Next cell
    
    MsgBox res
End Sub
7 Adgjj
 
10.02.15
10:41
Спасибо, конечно.
Без макроса есть возможность проверить только формулами?
8 b_ru
 
10.02.15
11:42
Быстро в смысле времени выполнения?
9 SUA
 
10.02.15
11:53
10 Adgjj
 
10.02.15
12:01
(8) да, т.к. объем инфо очень большой
11 Adgjj
 
10.02.15
12:01
(9) смотрю что за регулярные выражения
12 b_ru
 
10.02.15
12:58
(10) Тогда о формулах в принципе нужно забыть.

Ну и в предложенном макросе вместо поиска в строке в условии
If InStr(1, Symbols, s) = 0 Then
использовать сравнение кодов символа
13 Lama12
 
10.02.15
13:09
(7) Можно. Нужно один лист сделать только из формул и с помощью него проверять.
ИМХО. Пусть лучше САП проверяет что символы правильные. Для Excel это не родная задачка, а SAP, как я понял из (5), является источником. Почему бы при выгрузке не проверить?
14 ShoGUN
 
10.02.15
13:15
Если важна скорость - проще записать данные из экселя в текст(csv), а текст можно хоть чем обрабатывать.
15 Лефмихалыч
 
10.02.15
13:21
а вот в опенофисе можно использовать регулярки для поиска и замены безо всяких там сцаных макросов...

(0) что значит "найти или определить"? Тебе нужно удалить все, что не считается допустимым или просто получить ответ на вопрос "есть или нет"?
16 Adgjj
 
10.02.15
13:59
Спасибо всем.
(15) Нужно сказать пользователю, для какой строки в каких столбцах есть недопустимые символы.
опенофиса никогда не видела, к сожалению у нас MS Excel 2010
(13) проверка в SAPе отпадает
17 Adgjj
 
10.02.15
14:00
(14) посмотрю в инете что такое csv. И чем например его можно обработать.
18 Adgjj
 
10.02.15
14:01
(13) наверено очень длинная формула получится. проверять каждый символ.
19 Лефмихалыч
 
10.02.15
14:02
(16) макрос нарисуй с использованием vbscript regexp. Регулярка такая:
"[^A-z|0-9|\/|-|\?|\:|(|)|.|\,|\'|+]"
20 Adgjj
 
10.02.15
14:04
(19) в MS Excel 2010 можно? Новичку долго разбираться, что такое vbscript regexp?
21 Adgjj
 
10.02.15
14:23
в MS Excel 2010 через References подключила Microsot VBScript Regular Expressions 5.5.
22 Adgjj
 
11.02.15
09:39
Посмотрите, пжл, почему-то моя функция =rgx(B7) не работает.
Public Function Rgx(astring As Range) As String

Dim re As RegExpSet 're - понимает RegExp
Dim tempString

re.Pattern = "[^A-z|0-9|\/|-|\?|\:|(|)|.|\,|\'|+]" 'Шаблон
re.Global = True 'True - проверка всего текста, False - проверка до перовго соответствия
re.IgnoreCase = True 'True - учитывать регистр, False - игнорировать регистра
're.MultiLine = True 'True - многострочный объект, False - однострочный объект

tempString = re.Test(astring) 'возвращает False, если строка не соответствует шаблону
If tempString = False Then RgxPhone = "Недопустимый символ!"

End Function
23 Adgjj
 
11.02.15
09:42
Вернее, так
Public Function Rgx(astring As Range) As String

Dim re As RegExpSet 're - понимает RegExp
Dim tempString

re.Pattern = "[^A-z|0-9|\/|-|\?|\:|(|)|.|\,|\'|+]" 'Шаблон
re.Global = True 'True - проверка всего текста, False - проверка до перовго соответствия
re.IgnoreCase = True 'True - учитывать регистр, False - игнорировать регистра
're.MultiLine = True 'True - многострочный объект, False - однострочный объект

tempString = re.Test(astring) 'возвращает False, если строка не соответствует шаблону
If tempString = False Then Rgx = "Недопустимый символ!"

End Function
24 Adgjj
 
13.02.15
16:19
Шаблон: re.Pattern = "[A-z|0-9|\Q-|?|:|(|)|.|,|'|+|s\E]"
Не находит символ "&" в строке "Pen&". В строке "&" находит.
25 Adgjj
 
13.02.15
16:19
в шаблоне перечислены допустимые символы.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший