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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2016, 17:52   #1
REztor
Форумчанин
 
Регистрация: 28.02.2009
Сообщений: 302
По умолчанию Проверка на правильность написанных данных

Всем привет. Можете помочь с макросом, который будет проверять каждую ячейку столбца и в том случае, если в тексте ячейки присутствует ошибка в проставлении скобок, останавливать работу макроса и выводить сообщение, в каком месте листа макрос обнаружил ошибку. Например, запись «Текст(текст)» будет правильно, а такая – «Текст)текст(» или «((( )) () ))» будут неправильными и для них следует вывести сообщение об ошибке.
REztor вне форума Ответить с цитированием
Старый 13.12.2016, 19:25   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Пробуйте. При остановке по ошибке макрос запоминает ячейку, на которой произошла остановка, и при повторном запуске продолжает проверку с этой ячейки.
Код:
Sub Rez()
Static r As Range, i&
Dim b&, j&, s$
  If i = 0 Then
    Set r = Intersect(ActiveSheet.UsedRange, ActiveCell.EntireColumn)
    i = 1
  End If
  For i = i To r.Count
    s = r(i)
    b = 0
    For j = 1 To Len(s)
      Select Case Mid$(s, j, 1)
      Case "("
        b = b + 1
      Case ")"
        b = b - 1
        If b < 0 Then
ex:       r(i).Select
          MsgBox "Скобки!", vbExclamation
          Exit Sub
        End If
      End Select
    Next
    If b Then GoTo ex
  Next
  i = 0
  MsgBox "Столбец проверен.", vbInformation
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 14.12.2016, 13:53   #3
REztor
Форумчанин
 
Регистрация: 28.02.2009
Сообщений: 302
По умолчанию

Спасибо, нужно чтобы только такой вариант записи считался корректным "Текст(текст)", а такие "Текст((текст))", "Текст()текст))", "Текст(((текст)))" и т.д. - нет. Нужно чтобы были найдены все ошибки, а не только первая. И хотелось чтобы была возможность перенести столбец в другое место или на другой лист.
REztor вне форума Ответить с цитированием
Старый 14.12.2016, 14:37   #4
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

1. Определитесь с форумом. Если размещаете вопрос на разных форумах, информируйте об этом на всех форумах.

2. нужно чтобы только такой вариант записи считался корректным "Текст(текст)"
Определите корректный вариант более четко. Пока понятно, что только одна пара скобок.
Может ли текст начинаться со скобки? Может ли текст быть после скобки? Могут ли внутри скобок быть только пробельные символы? Т.е. какие варианты корректны:
"(Текст текст)", "Текст(текст)текст", "Текст( )"

3. #1 если в тексте ячейки присутствует ошибка в проставлении скобок, останавливать работу макроса и выводить сообщение
#3 Нужно чтобы были найдены все ошибки
Как совместить эти требования?
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 14.12.2016, 15:13   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

на мой взгляд при проверке скобок на корректность абсолютно достаточен след алгоритм:
1. проходим по всем символам строки и "суммируем скобки" (встретилась открывающаяся скобка +1, встретилась закрывающаяся -1)
2. в процессе суммирования после каждой -1 проверяем сумму на < 0. если меньше - выход, тест провален
3. в конце тест пройден, если СуммаСкобок = 0
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 14.12.2016, 16:21   #6
REztor
Форумчанин
 
Регистрация: 28.02.2009
Сообщений: 302
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
1. Определитесь с форумом. Если размещаете вопрос на разных форумах, информируйте об этом на всех форумах.

2. нужно чтобы только такой вариант записи считался корректным "Текст(текст)"
Определите корректный вариант более четко. Пока понятно, что только одна пара скобок.
Может ли текст начинаться со скобки? Может ли текст быть после скобки? Могут ли внутри скобок быть только пробельные символы? Т.е. какие варианты корректны:
"(Текст текст)", "Текст(текст)текст", "Текст( )"

3. #1 если в тексте ячейки присутствует ошибка в проставлении скобок, останавливать работу макроса и выводить сообщение
#3 Нужно чтобы были найдены все ошибки
Как совместить эти требования?
2. В общем лучше, чтобы было на каждую открывающуюся скобку была закрывающая. Если какой-то скобки не хватает выдавать ошибку или на несоответствующую скобку.
3. Тут лучше представить если значения записываются, если ввели данные верно продолжается работа, если нет, то выводится ошибка.
REztor вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка на правильность SweetyGirl Помощь студентам 17 12.04.2015 13:41
Проверка слов написанных через запятую в Edit FleXik Общие вопросы Delphi 19 10.07.2014 08:04
Проверка на правильность Mr_M Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 09.04.2014 23:17
Проверка на правильность ввода в Edit Claster Помощь студентам 1 05.04.2011 13:27
Проверка строки на правильность данных haros Microsoft Office Excel 10 28.02.2009 16:39