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

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

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

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

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

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

Добрый день!
Насколько я знаю ВПР возвращает только одно (и кстати только первое) значения из диапазона. А если критерия 2, то но вернет только первое.
Как реализовать (формула/VBA) процесс вывода всех найденных критериев, к примеру через запятую.
Во вложении примерный файл, я думаю тут нужно ввести новую формулу через VBA. Подскажите.

Cпасибо.
Вложения
Тип файла: zip пример.zip (7.5 Кб, 12 просмотров)
Евгений Таб вне форума Ответить с цитированием
Старый 11.06.2014, 10:54   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Код:
=VLOOKUPCOUPLE($A$3:$B$26,1,G3,2,", ")
поищите код UDF тут на форуме - я когда-то публиковал.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 11.06.2014, 10:58   #3
Евгений Таб
Форумчанин
 
Аватар для Евгений Таб
 
Регистрация: 09.08.2013
Сообщений: 202
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Код:
=VLOOKUPCOUPLE($A$3:$B$26,1,G3,2,", ")
поищите код UDF тут на форуме - я когда-то публиковал.
не понимаю о чем идет речь, поясните пжслст
Евгений Таб вне форума Ответить с цитированием
Старый 11.06.2014, 10:59   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Плохо ищется, не нашёл на форуме...
Код:
Function VLOOKUPCOUPLE(Table As Variant, _
                       SearchColumnNum As Integer, _
                       SearchValue As Variant, _
                       RezultColumnNum As Integer, _
                       Separator_ As String, _
                       Optional BezPovtorov As Boolean = True)

'Table - таблица, где ищем
'SearchColumnNum - столбец, где ищем
'SearchValue - данные, которые ищем
'RezultColumnNum - колонка, откуда берём результат
'Separator_ - разделитель, желательно вводить с пробелом в конце
'BezPovtorov - если поставить 0, то будут выведены все повторяющиеся совпадения

    Dim i As Long, tmp As String, vlk

    If TypeName(Table) = "Range" Then Table = Intersect(Table.Parent.UsedRange, Table).Value
    If BezPovtorov Then
        With CreateObject("Scripting.Dictionary")
            For i = 1 To UBound(Table)
                If Table(i, SearchColumnNum) = SearchValue Then
                    tmp = Table(i, RezultColumnNum)
                    If tmp <> "" Then
                        If Not .Exists(tmp) Then
                            .Add tmp, 0&
                            vlk = vlk & Separator_ & Table(i, RezultColumnNum)
                        End If
                    End If
                End If
            Next i
        End With
    Else
        For i = 1 To UBound(Table)
            If Table(i, SearchColumnNum) = SearchValue Then
                vlk = vlk & Separator_ & Table(i, RezultColumnNum)
            End If
        Next i
    End If
    If vlk > 0 Then vlk = Mid(vlk, Len(Separator_) + 1) Else vlk = ""
    VLOOKUPCOUPLE = vlk
End Function
Поясняю - это код функции пользователя - его в стандартный модуль (лучше надстройки, или этого файла, но можно и в Personal'ьную книгу).
Применять на листе как обычную функцию, выбрать в разделе "Определённые пользователем".
P.S. И Вы же сами просили "новую формулу через VBA" - вот это оно и есть. И иначе в общем случае никак и не сделать (стандартными формулами трудно, на 1000 повторов не написать).
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 11.06.2014 в 11:04.
Hugo121 вне форума Ответить с цитированием
Старый 11.06.2014, 11:30   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

я написал функцию Груши:
Код:
Function Grushi(N)
  Dim c As Range
  Grushi = ""
  For Each c In Cells(WorksheetFunction.Match(N, [a:a], 0), 1).Resize(WorksheetFunction.CountIf([a:a], N), 1).Offset(0, 1)
    If Not IsEmpty(c) Then Grushi = Grushi & "," & c
  Next
  If Grushi <> "" Then Grushi = Right(Grushi, Len(Grushi) - 1)
End Function
во вложении пример ее использования.
Вложения
Тип файла: rar примерГруш.rar (10.7 Кб, 18 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 11.06.2014, 11:37   #6
Евгений Таб
Форумчанин
 
Аватар для Евгений Таб
 
Регистрация: 09.08.2013
Сообщений: 202
По умолчанию

Разобрался, сделал надстройку, пришил ее, но вбить верные данные не могу, проверьте вашу формули во втором посте, с ней чтото не так
Евгений Таб вне форума Ответить с цитированием
Старый 11.06.2014, 11:41   #7
Евгений Таб
Форумчанин
 
Аватар для Евгений Таб
 
Регистрация: 09.08.2013
Сообщений: 202
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
я написал функцию Груши:
Код:
Function Grushi(N)
  Dim c As Range
  Grushi = ""
  For Each c In Cells(WorksheetFunction.Match(N, [a:a], 0), 1).Resize(WorksheetFunction.CountIf([a:a], N), 1).Offset(0, 1)
    If Not IsEmpty(c) Then Grushi = Grushi & "," & c
  Next
  If Grushi <> "" Then Grushi = Right(Grushi, Len(Grushi) - 1)
End Function
во вложении пример ее использования.
интересное решение, буду думать как свои данные прикрутить
Евгений Таб вне форума Ответить с цитированием
Старый 11.06.2014, 11:41   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Вероятно у нас разные разделители. Я свои показал - Вы нет
Если формулу заводить мастером - разделители роли не играют.
Кстати, результат получается точно как у Вас в файле.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
значения столбца в combobox shalun43911 Компоненты Delphi 2 04.05.2014 19:53
DataGridView не хочет добавлять значения более чем в 3 строки Konstantin1706 Windows Forms 0 08.12.2013 15:13
2 столбца 2 таблицы схожие значения greendoid Microsoft Office Excel 3 21.08.2012 13:21
Увеличить значения столбца на 50% saizar Microsoft Office Excel 7 02.04.2011 15:07
Как извлечь в один массив данные из одного столбца в MySQL ? Novichok PHP Помощь студентам 0 25.03.2011 21:39