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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2011, 12:38   #1
flacon45
Пользователь
 
Регистрация: 21.01.2011
Сообщений: 20
По умолчанию макрос и ВПР

Добрый день.
Помогите плз.

На одном листе ("справочник") есть два столбца:
товар принадлежность
"яблоки" яблоки
яблоки. яблоки
яблоки_ яблоки
"груши" груши



На втором листе ("исходник") так:
Товар Продажи
"яблоки" 1 000
яблоки 2 000
яблоки 5 000
груши 7 000
апельсины 9 000
яблоки_ 21 000


Мне необходимо на основе справочника исправить название товар. Для этого делаю цикл по листу "исходники". Беру к примеру "яблоки" и перетаскиваю в ячейку на лист справочник, где в соседней ячейки прописана функция ВПР по 2 стодбцам справочника =ВПР(F19;$A:$B;2;0).
Функция ВПР возвращает яблоки (уже без ковычек) затем копирую на лист исходник и все хорошо.
Но если к примеру в имени товара ничего менять не надо, то впр выдаст #Н/Д. В макросе в условии (IF) не воспринимает и пишет ошибку: run time 13: type mismatch.
Помогите разобраться?

Сама прога:

Цитата:
Private Sub CommandButton2_Click()

stolb_proverka = TextBox1.Value ‘ задается столбец для проверки
col = TextBox2.Value ‘ новый столбец с исправленным названием
q_strok = TextBox3.Value ‘ кол-во строк


'заголовок
Sheets("исходник").Cells(1, col) = "Исправленный"

'цикл на исправление

For i = 2 To q_strok ' со второй строки начинаем
Sheets("справочник").Cells(19, "F") = Sheets("исходник").Cells(i, stolb_proverka) ‘ присваиваю для дальнейшей обработки ВПР

If Sheets("справочник").Cells(19, "G") <> "#Н/Д" Then
Sheets("исходник").Cells(i, col) = Sheets("справочник").Cells(19, "G")
End If
'если изменений нет, то оставляем название товара как есть
If Sheets("справочник").Cells(19, "G") = "#Н/Д" Then
Sheets("исходник").Cells(i, col) = Sheets("исходник").Cells(i, stolb_proverka)
End If
Next i
End Sub

p.s.
именно хочется сделать 1 цикл и ВПР. Через 2 цикла и без ВПР все работает.

спасибо
flacon45 вне форума Ответить с цитированием
Старый 08.02.2011, 12:58   #2
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Не совсем ясна задача, но может в одном цикле просто убрать ненужные символы(".", "_" и пр.)

Код:
Sub Нормализовать()
For j = 2 To Columns(1).Rows(65536).End(xlUp).Row
Cells(j, 1) = Replace(Cells(j, 1), ".", "")
Cells(j, 1) = Replace(Cells(j, 1), ",", "")
Cells(j, 1) = Replace(Cells(j, 1), "-", "")
Cells(j, 1) = Replace(Cells(j, 1), "_", "")
Cells(j, 1) = Replace(Cells(j, 1), """", "")
Next j
End Sub
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru

Последний раз редактировалось alex77755; 08.02.2011 в 13:07.
alex77755 вне форума Ответить с цитированием
Старый 08.02.2011, 13:14   #3
flacon45
Пользователь
 
Регистрация: 21.01.2011
Сообщений: 20
По умолчанию

могут быть не только символы. А например так: "ябл.". Поэтому я и сделал справочник
flacon45 вне форума Ответить с цитированием
Старый 08.02.2011, 13:37   #4
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Мож проще:
If с Like "ябл*" then c=...
Понятно, что вместо "ябл*", адрес ячейки из словаря.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 08.02.2011, 14:41   #5
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Цитата:
могут быть не только символы. А например так: "ябл.".
Ну, на всякого мудреца... Если программно предусмотреть все возможніе описки, сокращения и просто безграмотное написание..
А если не груши, а гр.? Вметсто мандарины - ма-ны. Да мало ли кому что на ум вбредёт.
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 08.02.2011, 15:15   #6
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

А если еще проще - давайте Ваш файл-пример с реальным расположением данных(чтоб потом не было бесконечных уточнений) и с Вашим словарем. Рисовать за Вас пример, как видите, никто не спешит.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 08.02.2011, 16:43   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Так вроде просто 2 массива, цикл в цикле... сравнить - переписать. Без формул вообще.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 08.02.2011, 16:52   #8
flacon45
Пользователь
 
Регистрация: 21.01.2011
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Так вроде просто 2 массива, цикл в цикле... сравнить - переписать. Без формул вообще.
мне хотелось решить эту задачу именно через ВПР. Что-то с типом - непонимаю. Файл прикреплю вечером
Так можно вообще без макросов просто функцией на листе исходник =ЕСЛИОШИБКА(ВПР(E2;справочник!A$2:B $75;2;0);E2).
flacon45 вне форума Ответить с цитированием
Старый 08.02.2011, 16:54   #9
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Так вроде просто 2 массива, цикл в цикле... сравнить - переписать. Без формул вообще.
Отож, возьми и напиши. А потом окажется, что данные расположены не так и не в том месте(и не такие). И на уточнение-переписку макросов уйдет трое суток. Без примера тут делать нефиг.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 08.02.2011, 16:56   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Я уже написал - может самому пригодится, или ещё куда. Жду примера для примерки
Вообще, этот справочник можно держать например в отдельном файле, даже например в текстовом, или в файле с макросом. И обрабатывать этим кодом выделенный диапазон, или столбец целиком.
Т.е. открыли инструмент (или даже иметь его всегда под рукой в Personal.xls), открыли кривой файл, выделили корявые названия - запустили код. Готово.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 08.02.2011 в 17:05.
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос постоянно обрабатывает события. При открытии другой книги макрос обрывается. Ples Microsoft Office Excel 8 17.12.2016 18:15
Exel - при открытии файла через макрос, если файл отсутствует - виснет весь макрос gregory1b Microsoft Office Excel 2 14.10.2010 11:51
Макрос, запускающий макрос из другого закрытого файла petruha Microsoft Office Excel 7 14.03.2010 11:31
Макрос вставки файлов в листы-Необходимо изменить ниже приведённый макрос as-is Microsoft Office Excel 4 25.02.2010 07:51
ВПР stas77 Microsoft Office Excel 2 20.01.2010 09:46