2

Я надеюсь, что мое описание является точным; улучшения приветствуются.
У меня есть 2 таблицы в Excel. В Таблице 1 есть 2 столбца, A и B. Это может быть отношение многих ко многим.
В таблице 2 есть 2 столбца, А и В. Это разные записи.
Table1-ColumnB и Table2-ColumnA - это одинаковые значения - внешний ключ, если хотите.

У меня есть список различных значений из Table1-ColumnA в Result-List. Мне нужно знать, если для каждого элемента в этом списке, если после объединения по внешнему ключу, все ли связанные значения в Table2-Column2 пустые. (Мне не нужно знать, какой контент у него есть, только если у него есть контент.)

Все это должно быть сделано в одной ячейке в Excel.

Таблицы и результат

1 ответ1

1

Если кто-то знает, как получить желаемый результат, используя формулы массива, сообщите нам. Я не думаю, что это возможно ... Поэтому я использую VBA. Это мое кодированное решение (UDF):

Option Explicit
Function Results(cell As Range, table_1 As Range, table_2 As Range) As String
Dim aTable1() As Variant
Dim aTable2() As Variant
aTable1 = table_1.Value
aTable2 = table_2.Value
Dim i As Long, j As Long 'counters

For i = 1 To UBound(aTable1, 1)
    If aTable1(i, 1) = cell.Value Then
        For j = 1 To UBound(aTable2, 1)
            If aTable1(i, 2) = aTable2(j, 1) Then
                If Not IsEmpty(aTable2(j, 2)) Then
                    Results = Results & aTable2(j, 1) & " has content, "
                Else
                    Results = Results & aTable2(j, 1) & " has no content, "
                End If
            End If
        Next
        If Results = vbNullString Then
            Results = aTable1(i, 2) & " NOT FOUND"
            GoTo Ending
        End If
    End If
Next
Results = Left(Results, Len(Results) - 2)
If (Len(Results) - Len(Replace(Results, "has", ""))) / 3 = _
(Len(Results) - Len(Replace(Results, "no", ""))) / 2 Then
    Results = "BLANK - " & Results
End If

Ending:
End Function

Вот результат, который вы получите: UDF Вы также можете использовать обычные ссылки на Range, т. I3 я мог бы также вставить следующую формулу: =Results(H3,B$3:C$13,E$3:F$10) .

Вставьте код в редактор VBA (Alt + F11) во вновь вставленные модули "Module1" (не в модулях "ThisWorkbook" или "Sheet")

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .