Проверка данных мусора с помощью Excel VBA - PullRequest
1 голос
/ 04 июля 2019

Моя команда и я создали инструмент консолидатора, который объединяет данные из таблиц, загруженных с помощью кнопки.Тем не менее, есть дополнительное усовершенствование, которое хотели бы получить наши потенциальные клиенты.

Я не знаю, возможно ли это в VBA, но они хотели, чтобы кнопка проверяла и выделяла «мусорные данные» (например, еслиСтолбец First Name содержит пробел или, если он содержит ajsajdj или что-то подобное), он предложит пользователю и спросит, хотят ли они удалить его.

У нас уже есть код для инструмента консолидации (и он работает отлично), однако эта функция вызывает головную боль, поскольку я не знаю, возможно ли это.Я действительно хотел бы спросить предложения относительно этого, поскольку я действительно плохо знаком с VBA и программированием.

Может быть, я бы понял, что мне делать дальше.

Ответы [ 2 ]

2 голосов
/ 04 июля 2019

Давайте посмотрим, как человек подтвердит это

Он посмотрит на имя ajsajdj и подумает: «Я никогда раньше не видел это имя в своей жизни, поэтому это должно быть чепуха»данные".Но он может потерпеть неудачу, потому что тот факт, что он никогда не встречал это имя, не означает, что это не существующее имя (родители иногда могут быть изобретательны).

Так что на самом деле человек сравнивает ajsajdj ссписок имен (он имеет в виду из-за своего жизненного опыта).

Теперь программа может делать то же самое

Вы можете написать код, который сравнивает ajsajdj со списком допустимых имен.Но здесь мы находимся в той же точке, где человек тоже может потерпеть неудачу.Список никогда не будет полным, потому что завтра родители придумают новое имя (которого у вас нет в этом списке).

Заключение

Эта задача не может быть закодирована, если толькоВы определяете правило для допустимых или недействительных данных.Некоторые программы выглядят так, как будто они могут творить чудеса, но на самом деле это работает только из-за правил, которые вы им даете.

0 голосов
/ 04 июля 2019

Я делаю автоматизированный аудит этого типа в изобилии, поэтому я бы подошел к этому так;

Ваш «макрос аудита» - это, по сути, итератор с множеством проверок качества - это «имя» = «» и т. Д. Вы также можете запустить этот автоматический макрос.

  1. В одной строке данных каждый шаг консолидации
  2. После завершения консолидации.

Первый наиболее прост в использовании и работает следующим образом:

  1. После шага консолидации запустите «макрос аудита» в строке только что введенных данных.
  2. Если проблема обнаружена, запишите строку данных в отдельную вкладку, оставив столбец A пустым; не для вашей консолидации. В конце вашей консолидации выведите пользователю предупреждение, если в конце консолидации были обнаружены какие-либо строки проблем
  3. Пользователь skim читает данные на отдельной вкладке, ставит 1 в 'keep' в столбце A.
  4. Пользователь нажимает кнопку для запуска макроса, который добавляет строки с «1» против них к вашему полному набору данных (например, в конце, если порядок не имеет значения).

Точно так же вы можете подойти к этому, запустив аудит, когда консолидация будет полностью завершена; в этом случае вам нужно будет удалить или иным образом отслеживать строки, которые могут быть удалены, если пользователь решит не сохранять их.

Мне нравится этот подход, потому что он неблокирующий; Пользователь может оставить свой консолидатор для работы без надзора, а затем по своему усмотрению иметь дело с исключениями. Кроме того, вы можете написать / отредактировать столько тестов, сколько захотите, без существенной замены вашего консолидатора; затем вы можете также начать, например, подсчет количества каждой проблемы для каждого импорта и поместить его в отчет для постоянного улучшения ... есть варианты для расширения.

С точки зрения псевдокода, это итератор, полный блоков if-else, с одним флагом «есть проблема», который, если его значение равно 1, приводит к тому, что строка рассматривается как проблема;

For rowCount = startRow to endRow 
   ' startRow and endRow correspond to lines of data you just imported
   'Test 1
   if (Some condition e.g. cells(rowCount ,2).value = "") then
     issueFlag = 1
   End if

   'Test n...
   if (Some condition e.g. cells(startRow,2).value = "") then
     issueFlag = 1
   End if

next rowCount 

if issueFlag = 1 then
   'CODE TO PASTE DATA

   'Set some flag/variable which then triggers a Error Message at the end of the whole consolidation or audit
End if

Вы можете поставить Exit For в конце блока IF, поэтому, если активирован IssueFlag, вы немедленно выходите и пропускаете все дальнейшие тесты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...