Nano Hash - криптовалюты, майнинг, программирование

EXCEL возвращает диапазон значений на основе критериев

У меня есть функция VBA, которую я хотел бы передать настраиваемый диапазон данных (в отличие от полного диапазона столбцов таблицы) только при соблюдении определенных критериев в этой таблице. Например:

          Table_1                            Table_2
    A        B         C                A          B
1 Policy    Data     Status     |   1 Policy    Function
  --------------------------    |     -------------------
2   AA      25      approved    |   2   AA      [25, 35]
3   AA      19      unapproved  |   3   BB      [16]
4   BB      16      approved    |
5   CC      27      approved    |
6   CC      30      unapproved  |
7   AA      35      approved

В таблице 2, ячейка B2, я хотел бы вернуть диапазон всех значений Data из таблицы 1, где Policy = AA и Status = approved. Впоследствии в ячейке B3 диапазон значений, где Policy = BB и Status = approved и т. Д.

Возможно ли это с помощью формулы?


  • Это зависит от того, есть ли у вас уже уникальный список политик во второй таблице и используете ли вы Office 365 Excel? 08.02.2019
  • Я использую O365 Excel, и Table2 имеет неуникальный список политик (предполагается, что будет несколько строк AA и BB, которые должны возвращать те же диапазоны) 08.02.2019

Ответы:


1

Если у вас есть Office 365 Excel или более поздняя версия, вы можете использовать TEXTJOIN как формулу массива:

="[" & TEXTJOIN(",",TRUE,IF(($A$2:$A$7=F2)*($C$2:$C$7="approved"),$B$2:$B$7,"")) & "]"

Поскольку она является формулой массива, ее необходимо подтвердить с помощью Ctrl-Shift-Enter вместо Enter при выходе из режима редактирования.

введите описание изображения здесь


Если у вас нет Office 365 Excel или более поздней версии, вот UDF, который будет делать то, что вы хотите:

Function TEXTJOINIFS(rng As Range, delim As String, ParamArray arr() As Variant)
    Dim rngarr As Variant
    rngarr = Intersect(rng, rng.Parent.UsedRange).Value

    Dim condArr() As Boolean
    ReDim condArr(1 To Intersect(rng, rng.Parent.UsedRange).Rows.Count) As Boolean


    Dim i As Long
    For i = LBound(arr) To UBound(arr) Step 2
        Dim colArr() As Variant
        colArr = Intersect(arr(i), arr(i).Parent.UsedRange).Value
        Dim j As Long
        For j = LBound(colArr, 1) To UBound(colArr, 1)

            If Not condArr(j) Then
                Dim charind As Long
                charind = Application.Max(InStr(arr(i + 1), ">"), InStr(arr(i + 1), "<"), InStr(arr(i + 1), "="))
                Dim opprnd As String
                If charind = 0 Then
                    opprnd = "="
                Else
                    opprnd = Left(arr(i + 1), charind)
                End If
                Dim t As String
                t = """" & colArr(j, 1) & """" & opprnd & """" & Mid(arr(i + 1), charind + 1) & """"
                If Not Application.Evaluate(t) Then condArr(j) = True
            End If
        Next j
    Next i

    For i = LBound(rngarr, 1) To UBound(rngarr, 1)
        If Not condArr(i) Then
            TEXTJOINIFS = TEXTJOINIFS & rngarr(i, 1) & delim
        End If
    Next i

    TEXTJOINIFS = Left(TEXTJOINIFS, Len(TEXTJOINIFS) - Len(delim))

End Function

Вы бы назвали это похожим на СУММЕСЛИМН:

=TEXTJOINIFS(B:B,",",A:A,F2,C:C,"approved")

Он работает только со столбцами, а не со строками.

! [введите здесь описание изображения

07.02.2019
  • Моя ошибка, я использую Microsoft Office Professional Plus 2013 excel и, к сожалению, не имею функции TEXTJOIN 08.02.2019
  • @Sean, тогда vba - единственный выход. 08.02.2019
  • Спасибо, что нашли время написать это на VBA, очень признательны! 08.02.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..