Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2010, 05:24   #1
Rider-12
 
Регистрация: 17.06.2010
Сообщений: 4
Вопрос Проверка ячеек таблицы на корректность

здраствуйте! помогите с такой задачей, когда в таблице находятся данные и нужно проверить эти данные на корректность и добавить заливку на строку диапазона ячеек [A:G], если имеются некорректные данные. В столбцах [A:C] должны стоять только русские буквы, а в столбцах [D:F] только числа. буду очень благодарен!
Rider-12 вне форума Ответить с цитированием
Старый 22.06.2010, 05:31   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

А в столбце "G" что допустимо? Пустые значения допустимы? Пробелы, знаки препинания, спец. символы допустимы?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 22.06.2010, 05:35   #3
Rider-12
 
Регистрация: 17.06.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
А в столбце "G" что допустимо? Пустые значения допустимы? Пробелы, знаки препинания, спец. символы допустимы?
там только число, сумма [D:F]
Rider-12 вне форума Ответить с цитированием
Старый 22.06.2010, 06:23   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если в таблице уже находятся данные и требуется подсветить некорректные ячейки, то можно воспользоваться макросом:
Код:
Sub ReColor()
    Dim cell As Range
    For Each cell In Intersect(ActiveSheet.UsedRange, [A:C])
        If LCase(cell) Like "*[!а-я]*" Then cell.Interior.ColorIndex = 6 Else cell.Interior.ColorIndex = xlNone
    Next
    For Each cell In Intersect(ActiveSheet.UsedRange, [D:F])
        If cell Like "*[!0-9]*" Then cell.Interior.ColorIndex = 6 Else cell.Interior.ColorIndex = xlNone
    Next
End Sub
ПРИМЕЧАНИЕ: Т.к. Вы упорно не хотите говорить, что делать с пробелами, точками, запятыми и т.п., то макрос сделан так, что эти символы являются недопустимыми.

P.S. Если же требуется контролировать вводимые значения, то макрос будет другой и его выполнение будет привязано к событию изменения значения ячейки (ячеек) в контролируемых диапазонах.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 22.06.2010, 06:38   #5
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию

а если подсветить полностью строки, начиная с 4, а не ячейки?
Ilya_L вне форума Ответить с цитированием
Старый 22.06.2010, 07:11   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Тогда можно так:
Код:
Sub ReColor()
    Dim cell As Range: Application.ScreenUpdating = False
    Cells.Interior.ColorIndex = xlNone
    For Each cell In Intersect(ActiveSheet.UsedRange, [A:C], Rows("4:" & Rows.Count))
        If LCase(cell) Like "*[!а-я]*" Then cell.EntireRow.Interior.ColorIndex = 6
    Next
    For Each cell In Intersect(ActiveSheet.UsedRange, [D:F], Rows("4:" & Rows.Count))
        If cell Like "*[!0-9]*" Then cell.EntireRow.Interior.ColorIndex = 6 Else
    Next
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 22.06.2010, 07:16   #7
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию

А для запятой будет выглядеть так If cell Like "*[!,]*" ?
Ilya_L вне форума Ответить с цитированием
Старый 22.06.2010, 07:52   #8
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию

В столбцах D и E должны стоять целые числа, а в F и дробные, и целые, т.е. там должна еще запятая прописываться..
Ilya_L вне форума Ответить с цитированием
Старый 22.06.2010, 07:53   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Нет. Все несколько сложнее. Код
Код:
If LCase(cell) Like "*[!а-я]*" Then...
означает, что если в переведенном в нижний регистр (чтобы не проверять отдельно прописные и строчные символы) cell встречается хотя бы 1 символ, не принадлежащий (об этом говорит восклицательный знак) к группе символов [а-я], то условие выполняется. Следовательно, и латинские буквы и запятая и т.д. будут удовлетворять этому условию. Поэтому, при определении вхождения "чужого" символа, лучше всего просто игнорировать те, которые Вас не интересуют. Так, например, для того, чтобы допустить запятую, можно воспользоваться следующим:
Код:
Sub ReColor()
    Dim cell As Range: Application.ScreenUpdating = False
    Cells.Interior.ColorIndex = xlNone
    For Each cell In Intersect(ActiveSheet.UsedRange, [A:C], Rows("4:" & Rows.Count))
        If Replace(LCase(cell), ",", "") Like "*[!а-я]*" Then cell.EntireRow.Interior.ColorIndex = 6
    Next
    For Each cell In Intersect(ActiveSheet.UsedRange, [D:F], Rows("4:" & Rows.Count))
        If Replace(cell, ",", "") Like "*[!0-9]*" Then cell.EntireRow.Interior.ColorIndex = 6 Else
    Next
End Sub
P.S. Будьте внимательны. Если формат ячейки определен как числовой с десятичными знаками, то, например, число 23,00 это только отображение числа 23 в определенном Вами формате. На самом же деле, символ "," это значение не содержит.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 22.06.2010 в 07:58.
SAS888 вне форума Ответить с цитированием
Старый 22.06.2010, 08:12   #10
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию

а я так хотел сделать, чтобы в D и E стобцах были числа без запятых, а в F числа с запятыми или без них (дробные)...но на отдельный столбец она не работает
Код:
    Dim cell As Range: Application.ScreenUpdating = False
    Cells.Interior.ColorIndex = xlNone
    For Each cell In Intersect(ActiveSheet.UsedRange, [A:C], Rows("4:" & Rows.Count))
        If LCase(cell) Like "*[!а-я]*" Then cell.EntireRow.Interior.ColorIndex = 6
    Next
    For Each cell In Intersect(ActiveSheet.UsedRange, [D:E], Rows("4:" & Rows.Count))
        If cell Like "*[!0-9]*" Then cell.EntireRow.Interior.ColorIndex = 6
    Next
    For Each cell In Intersect(ActiveSheet.Range, [f], Rows("4:" & Rows.Count))
        If Replace(cell, ",", "") Like "*[!0-9]*" Then cell.EntireRow.Interior.ColorIndex = 6 Else
    Next
Ilya_L вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск и заполнение ячеек таблицы Окоча Юра Microsoft Office Excel 2 16.01.2010 19:00
проверка базы данных на корректность веденных данных samouelson БД в Delphi 1 20.12.2009 17:23
Проверка ячеек segail Microsoft Office Excel 4 06.12.2009 21:45
Проверка диапазона ячеек Last Microsoft Office Excel 9 16.08.2009 19:19
Проверка на наличие таблицы в БД Ramires БД в Delphi 3 18.12.2008 08:59