Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/СцепитьЕсли не находит все значения по заданному критерию - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » СцепитьЕсли не находит все значения по заданному критерию (Формулы/Formulas)
СцепитьЕсли не находит все значения по заданному критерию
ВасяСемячкин Дата: Воскресенье, 02.02.2020, 14:32 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Добрый день,

прошу помочь с решением, использую СцепитьЕсли , но по какой-то причине в некоторых случаях подтягиваются не все значения по заданному критерию.
В VBA не соображаю, макрос нашел на данном ресурсе.
Может у кого-то была подобная проблема? Как возможно решить?

Файл с примером прилагаю.

Заранее благодарю.
К сообщению приложен файл: 1292125.xlsm (145.6 Kb)
 
Ответить
СообщениеДобрый день,

прошу помочь с решением, использую СцепитьЕсли , но по какой-то причине в некоторых случаях подтягиваются не все значения по заданному критерию.
В VBA не соображаю, макрос нашел на данном ресурсе.
Может у кого-то была подобная проблема? Как возможно решить?

Файл с примером прилагаю.

Заранее благодарю.

Автор - ВасяСемячкин
Дата добавления - 02.02.2020 в 14:32
Hugo Дата: Воскресенье, 02.02.2020, 15:10 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3250
Репутация: 707 ±
Замечаний: 0% ±

2019
Посоветую использовать такую UDF:
Код
=VLOOKUPCOUPLE(Данные!A:B;1;A2;2;"+")

Код:
[vba]
Код
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
[/vba]
Правда этот код на Маках работать не будет. И иногда если в Винде остутствует словарь - то и на Винде не взлетит.
А предыдущий тянул не всё потому что там логика очевидно писалась под конкретную задачу...


excel@nxt.ru
webmoney: E265281470651 Z422237915069


Сообщение отредактировал Hugo - Воскресенье, 02.02.2020, 15:19
 
Ответить
СообщениеПосоветую использовать такую UDF:
Код
=VLOOKUPCOUPLE(Данные!A:B;1;A2;2;"+")

Код:
[vba]
Код
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
[/vba]
Правда этот код на Маках работать не будет. И иногда если в Винде остутствует словарь - то и на Винде не взлетит.
А предыдущий тянул не всё потому что там логика очевидно писалась под конкретную задачу...

Автор - Hugo
Дата добавления - 02.02.2020 в 15:10
ВасяСемячкин Дата: Воскресенье, 02.02.2020, 15:57 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Большое спасибо! Все работает! Очень помогли! :)
 
Ответить
СообщениеБольшое спасибо! Все работает! Очень помогли! :)

Автор - ВасяСемячкин
Дата добавления - 02.02.2020 в 15:57
ВасяСемячкин Дата: Воскресенье, 02.02.2020, 17:25 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Небольшое дополнение, немного поработал с данной функцией, обнаружил, что если для одного критерия в таблице с данными существует два одинаковых значения, то данное значение подтягивается только один раз.
Если кто-нибудь сможет подправить, буду очень благодарен.
 
Ответить
СообщениеНебольшое дополнение, немного поработал с данной функцией, обнаружил, что если для одного критерия в таблице с данными существует два одинаковых значения, то данное значение подтягивается только один раз.
Если кто-нибудь сможет подправить, буду очень благодарен.

Автор - ВасяСемячкин
Дата добавления - 02.02.2020 в 17:25
Hugo Дата: Воскресенье, 02.02.2020, 17:26 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3250
Репутация: 707 ±
Замечаний: 0% ±

2019
Там за это отвечает последний параметр, поставьте туда 0.
'BezPovtorov - если поставить 0, то будут выведены все повторяющиеся совпадения


excel@nxt.ru
webmoney: E265281470651 Z422237915069


Сообщение отредактировал Hugo - Воскресенье, 02.02.2020, 17:26
 
Ответить
СообщениеТам за это отвечает последний параметр, поставьте туда 0.
'BezPovtorov - если поставить 0, то будут выведены все повторяющиеся совпадения

Автор - Hugo
Дата добавления - 02.02.2020 в 17:26
ВасяСемячкин Дата: Воскресенье, 02.02.2020, 17:27 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Спасибо еще раз, я невнимателен...
 
Ответить
СообщениеСпасибо еще раз, я невнимателен...

Автор - ВасяСемячкин
Дата добавления - 02.02.2020 в 17:27
Hugo Дата: Воскресенье, 02.02.2020, 17:31 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3250
Репутация: 707 ±
Замечаний: 0% ±

2019
Это я в примере про это не подумал...


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеЭто я в примере про это не подумал...

Автор - Hugo
Дата добавления - 02.02.2020 в 17:31
Мир MS Excel » Вопросы и решения » Вопросы по Excel » СцепитьЕсли не находит все значения по заданному критерию (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!