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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2011, 09:46   #1
Gigabait
 
Регистрация: 19.01.2010
Сообщений: 5
Вопрос Перекодировка наименований

Имеется 2 таблицы (пусть в одной книге на разных листах). На одном листе имеется код изделия, наименование изделия, на втором тож код и наименование изделия, но код другой - новый. Надо сопсотавить названия (наименования изделий) и помимо старого кода вытянуть новый и поставить в соседнюю ячейку. Пример во вложении. Помогите, плиз... У меня в этом очень поверхностные понятия... Так вот на Лист2 надо проставить новые коды исходя из наименования изделия. Офис7, но сохраняю как 2003.
Вложения
Тип файла: rar пример.rar (7.3 Кб, 16 просмотров)
Gigabait вне форума Ответить с цитированием
Старый 03.06.2011, 09:54   #2
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

=ВПР(B2;Лист1!$B$2:$C$17;2;0)
Вложения
Тип файла: zip пример.zip (8.3 Кб, 11 просмотров)
nilem вне форума Ответить с цитированием
Старый 03.06.2011, 09:55   #3
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

Почитайте о функции ВПР(), самое оно.
=ВПР(наменование;таблица_где_первый _столбец_наименование;
столбец_второй;точное_совпадение_на именования)
vikttur вне форума Ответить с цитированием
Старый 03.06.2011, 10:00   #4
Gigabait
 
Регистрация: 19.01.2010
Сообщений: 5
По умолчанию

Спасибо! А можно ли реализовать это через VBA? Ибо в некоторых строках может быть либо пустота, либо просто наименование без кода. Не хочется наблюдать нули.. Еще может быть, что не все наименования будут и на том листе и на том, что приведет к нулевым значениям. Или просто эту формулу реализовать через ЕСЛИ? Хотелось бы все же VBA ибо количество строк заранее не известно ни на одном листе ни на другом...
Gigabait вне форума Ответить с цитированием
Старый 03.06.2011, 10:15   #5
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Просто возьмите диапазон побольше. И ЕСЛИОШИБКА (для Е2007), чтобы Н/Д не наблюдалось
=ЕСЛИОШИБКА(ВПР(B2;Лист1!$B$2:$C$10 00;2;0);"")
nilem вне форума Ответить с цитированием
Старый 03.06.2011, 15:31   #6
Gigabait
 
Регистрация: 19.01.2010
Сообщений: 5
По умолчанию

В проекте получается около 500 страниц. Вопрос: Как протянуть формулу сразу на все???
И еще. если надо не абсолютно точное совпадение, а к примеру отбросив с конца "мусор"?

Последний раз редактировалось Gigabait; 03.06.2011 в 15:53.
Gigabait вне форума Ответить с цитированием
Старый 03.06.2011, 15:53   #7
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Двойной клик по правому нижнему углу ячейки (когда курсор в виде крестика) с формулой, и она протянется настолько, сколько заполнено ячеек в соседнем столбце.
Или копируем ячейку с формулой - выделяем нужный диапазон для вставки - вставить. Формула заполнит весь диапазон, относительные ссылки сами изменятся.
nilem вне форума Ответить с цитированием
Старый 03.06.2011, 15:54   #8
Gigabait
 
Регистрация: 19.01.2010
Сообщений: 5
По умолчанию

это я знаюю. но 500 страниц протянуть - можно умереть!!!
Gigabait вне форума Ответить с цитированием
Старый 03.06.2011, 16:10   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Про 500 страниц поясните - это 500, куда нужно подтянуть данные, и они в одном файле. А страница с новыми кодами одна, и она тоже в этом файле, и назовём её например "NewCodes" - так можно сделать?
Тогда несложно макросом всё сделать автоматически, и сверить по частичному совпадению тоже. Но какой там может быть мусор, покажите, иначе трудно угадать, как частично сравнивать. А то может быть и 2ПП23-7=2ПП23-77.

Для Вашего примера, с точным соответствием так:

Код:
Option Explicit

Sub tt()
Dim a, aa, sh As Worksheet, i&, ii&
a = Sheets("NewCodes").[b1].CurrentRegion.Value
For Each sh In Worksheets
    If sh.Name <> "NewCodes" Then
        aa = sh.[b1].CurrentRegion.Value
            For i = 1 To UBound(aa)
                For ii = 1 To UBound(a)
                    If a(ii, 1) = aa(i, 2) Then aa(i, 3) = a(ii, 2): Exit For
            Next ii, i
        sh.[b1].CurrentRegion.Value = aa
    End If
Next
End Sub
Хотя намного быстрее было бы поместить список новых кодов в словарь и потом сверяться с словарём - отпали бы тысячи циклов по первому массиву. Но тогда частичное совпадение не придумал как реализовать, а тут легко Like добавить.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 03.06.2011 в 16:43. Причина: Поменял вложенность циклов - так быстрее... Главное - не запутаться :)
Hugo121 вне форума Ответить с цитированием
Старый 03.06.2011, 16:40   #10
Gigabait
 
Регистрация: 19.01.2010
Сообщений: 5
По умолчанию

страниц печатных на одном Экселевском листе...
Gigabait вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка массива и вывод уникальных наименований клиентов Иванов_ДМ Microsoft Office Excel 13 15.05.2013 23:30
перекодировка Александр 81 Помощь студентам 0 12.12.2010 16:54
Delpi-перекодировка Бурундук Помощь студентам 9 21.08.2010 13:27
поиск одинаковых наименований МаRия Microsoft Office Excel 3 11.03.2010 13:00
Перекодировка из ASCII Dimo444ka Помощь студентам 2 25.05.2008 13:22