2015-10-22 3 views
0

Если возможно, мне нужна помощь в создании макроса excel, который очистит некоторые поля в моих таблицах.Очистка данных с помощью макроса

Я получаю таблицы Excel с различным количеством записей. И в следующих таблицах мне нужно форматировать поля как Имя/Фамилия/Профессия/Город (я использовал функцию первенствовать Proper(), когда я сделал это вручную). Самое главное, мне нужно также заменить поле со стандартными значениями с другого листа. И: заменить Состояние (из коротких значений, например, TX в Техас), а также заменить Страна от нас или usa или с Соединенными Штатами Америки до "United States". (когда я выполнил это вручную, я использовал функцию VlookUp()).

Пример: У меня есть таблица (ы), например:

Лист 1, Данные:

FName LName Email Title City ST Phone Industry Country John sm [email protected] it dallas TX 5556663344 mobile us jess lee [email protected] ba ny ny 6667775656 art usa nick Jahn [email protected] ba raleigh ny 444-3338888 tech us

Лист2, Состояние:

ST ST_Full TX Texas NY New York NC North Carolina

и т.д. - > список всех штатов США/Канады

Лист 3, Промышленность:

Industry Industry_Correct Mobile Telecom Art Other Tech Technology

и т.д. -> список всех возможных вариантов правильные/неправильные отрасли промышленности

Лист 4, Страна:

Country
Angola Canada Russian Federation United States

для Лист 4, у меня есть алфавитный список из более чем 200 стран, и нам нужно заменить такие страны, как «мы», «Россия» на свое имя из списка.

Результат листа, (что ожидает иметь):

FName LName Title City ST Phone Industry Country John Sm It Dallas Texas 555-666-3344 Telecom United States Jess Lee Ba New York New York 666-777-5656 Other United States Nick Jahn Ba Raleigh New York 444-333-8888 Technology United
States

email [email protected] [email protected] [email protected]

Я пытался записать очень простой макрос; но у меня очень разные таблицы - w. различный объем записей - от 5 до 2000 или 3000 записей. Простой записанный макрос только как-то очищен ФИКСИРОВАННОЕ количество записей.

+0

Это может помочь, если вы делитесь макросом, который вы записали, который очищает фиксированный объем записей. – hannebaumsaway

+0

Я думаю, что самым простым решением было бы использовать INDEX MATCH или VLOOKUP – Mukul215

+0

To Praguian: я записал много шагов, чтобы очистить все поля, используя функции excel. Итак, не уверен, могу ли я опубликовать этот макрос здесь ... Кроме того, просто для уточнения - у меня будет различное (неопределенное) количество записей только на входном листе - в Листе 1! Вот что такое макрос: –

ответ

0

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

Dim sht As Worksheet 
Dim LastRow As Long 

Set sht = ThisWorkbook.Worksheets("[sheet name]") 
'Can also reference the sheet code, which is better in my opinion. Set sht = Sheet1 or whatever number your sheet is. 

'This will fetch the last row for you 
LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row 

Вы можете найти этот сайт полезным: http://www.thespreadsheetguru.com/blog/2014/7/7/5-different-ways-to-find-the-last-row-or-last-column-using-vba

Чтобы ответить на Ваши комментарии: Вы должны осуществить это в самом начале вашего кода. Итак, что мы делаем: 1) установка листа для макроса, 2) определение последней строки данных на этом листе и 3) вам нужно использовать эту последнюю строку для установки диапазона для макроса для работы или по крайней мере, пройдите через свой макрос и замените строку 1000 на LastRow. Таким образом, в дополнение к коду я представил, вы можете иметь что-то вроде:

Dim myRange as Range: Set myRange = sht.Range("A2:Z" & LastRow) 

Тогда вы можете просто ссылаться MyRange, когда вам нужно макрос, чтобы сделать что-то в этом диапазоне. Надеюсь, это поможет. Вместо того, чтобы создавать новую запись, вы должны иметь возможность редактировать свое исходное сообщение, если необходимо, чтобы добавить код. Что касается вашего вопроса IFERROR, то его трудно сказать, самый правильный подход без дополнительной информации. Вообще говоря, я считаю, что лучше использовать операторы if/else, но вы можете просто использовать WorksheetFunction.iferror (...), если вам нужно реплицировать те же функции iferror, которые встроены в Excel.

+0

Джейк: Спасибо! Мой вопрос: где в моем макросе я должен реализовать то, что вы посоветовали? Я могу опубликовать новую тему. код тоже ... –

+0

Кроме того, на данный момент я записал свой макрос для 1 000 записей (так как я знаю, что у нас никогда не будет более 1K записей) и используется функция IFERROR, где я добавил то, что я хотел бы отображать, если там ошибка. Но, я думаю, это недостаточно для этого. –

Смежные вопросы