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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2015, 18:04   #1
Евгений Таб
Форумчанин
 
Аватар для Евгений Таб
 
Регистрация: 09.08.2013
Сообщений: 202
По умолчанию ВПР через разделитель

Добрый день.

Подскажите пож-ста инструмент (макрос) для ВПР через разделитель.
Пользовательская формула имеется для таких операций.

А когда значений более 600 тыс строк, то формула не подойдет.

Очень прошу помощи.

Во вложении пример. Зеленое дано, желтое нужно получить.

Спасибо.

ps было бы замечально чтобы код был без R1C1 ccылок и более менее понятный неопытному юзеру.

Заранее большое спасибо!
Вложения
Тип файла: zip пример.zip (11.1 Кб, 16 просмотров)
Евгений Таб вне форума Ответить с цитированием
Старый 12.08.2015, 20:53   #2
kalbasiatka
Форумчанин
 
Регистрация: 21.10.2012
Сообщений: 208
По умолчанию

Хороший пример, цветастенький. А формула где? Или тут надо самому допетрить, как оно получилось?
kalbasiatka вне форума Ответить с цитированием
Старый 12.08.2015, 21:16   #3
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Макрос
Код:
Sub QWERT()
Dim R, M(), D, DR, W
    M = Range("A1").Resize(UsedRange.Rows.Count, 6).Value
    Set D = CreateObject("Scripting.Dictionary")
    For R = 2 To UBound(M)
        If D.Exists(M(R, 1)) Then
            D(M(R, 1))(M(R, 3)) = M(R, 3)
        Else
            Set DR = CreateObject("Scripting.Dictionary")
            DR(M(R, 3)) = M(R, 3)
            D.Add M(R, 1), DR
        End If
    Next R
    
    For R = 2 To UBound(M)
            For Each DR In D(M(R, 1)).keys
                M(R, 6) = IIf(Len(M(R, 6)) = 0, DR, M(R, 6) & "/" & DR)
            Next
    Next R
    Range("A1").Resize(UsedRange.Rows.Count, 6) = M
End Sub
Вложения
Тип файла: rar пример_решения_макрос.rar (11.2 Кб, 25 просмотров)
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru

Последний раз редактировалось alex77755; 12.08.2015 в 21:26. Причина: прицепил файл
alex77755 вне форума Ответить с цитированием
Старый 12.08.2015, 22:02   #4
Евгений Таб
Форумчанин
 
Аватар для Евгений Таб
 
Регистрация: 09.08.2013
Сообщений: 202
По умолчанию

alex77755, спасибо! + тебе

А как запускать это чудо не из листа, а из модуля?

Последний раз редактировалось Евгений Таб; 12.08.2015 в 23:25. Причина: sdgsdgdsghsfd
Евгений Таб вне форума Ответить с цитированием
Старый 13.08.2015, 02:07   #5
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

перенести процедуру в модуль поправив адресацию в 2 строках
Код:
 M = Range("A1").Resize(ActiveSheet.UsedRange.Rows.Count, 6).Value
 Range("A1").Resize(ActiveSheet.UsedRange.Rows.Count, 6) = M
И можно добавить строчку очистки колонки результата что бв не умножались результаты при повторном запуске
Код:
    For R = 2 To UBound(M)
            M(R, 6) = ""
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ВПР и СУММЕСЛИ через разделитель Евгений Таб Microsoft Office Excel 3 29.06.2015 23:02
Прочитать значения из строки через разделитель Xo66um Общие вопросы Delphi 4 23.08.2013 01:55
Чтение и запись с файла через разделитель Leks123 PHP 9 11.08.2013 16:35
Перенос значений из ListBox в Memo через разделитель artemavd Общие вопросы Delphi 4 23.12.2011 17:00
Вывести из массива через разделитель sergeyrulit PHP 2 05.01.2011 15:56