Conte valores não-brancos após um produto cartesiano no excel

2

Espero que minha descrição seja precisa; melhorias bem-vindas.
Eu tenho 2 tabelas no Excel. Na tabela 1 há 2 colunas, A e B. Pode ser um relacionamento muitos ou muitos.
Na Tabela 2 há duas colunas, A e B. Essas são entradas distintas.
Table1-ColumnB e Table2-ColumnA são os mesmos valores - uma chave estrangeira, se você quiser.

Eu tenho uma lista de valores disctinct da Table1-ColumnA na Result-List. Eu preciso saber se para cada item desta lista, se depois de uma associação na chave estrangeira, se todos os valores associados na Tabela2-Coluna2 estão em branco. (Eu não preciso saber o conteúdo que tem, apenas se tiver conteúdo).

Tudo isso precisa ser feito em uma única célula no Excel.

    
por tithij 29.01.2015 / 00:12

1 resposta

1

Se alguém souber como obter o resultado desejado usando fórmulas de matriz, informe-nos. Eu não acho que é possível ... Por isso eu uso o VBA. Esta é a minha solução codificada (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

Este é o resultado que você recebe: Vocêtambémpodeusarreferênciascomunsdointervalo,ouseja,emI3eutambémpoderiaterinseridoessafórmula:=Results(H3,B$3:C$13,E$3:F$10).

ColeocódigonoEditordoVBA(Alt+F11),nomódulo"Module1" recém-inserido (não nos módulos "ThisWorkbook" ou "Sheet")

    
por 15.02.2015 / 01:48