Listagem de células não-vazias no Excel com base em coluna (s) adjacente (s)

2

Tendo em conta as colunas A e B, desejo listar os valores A que têm uma célula B não vazia em sua linha, na coluna C:

A     B     C
One         Two
Two   x     Four
Three
Four  x
...

O melhor que consegui até agora é

{=INDEX(A1:A4;MATCH(TRUE;B1:B4<>"";0))}

que me dá "Two" em C1, mas como eu continuo?

Note: This a simplified version of my problem: in reality, there are multiple columns like B, so filtering is not an option. Moreover, B and C are not in the same sheet, and I want the C-sheet to update automatically whenever I edit the B-sheet, so copy&paste is not practical either.

    
por warakawa 01.05.2014 / 06:56

3 respostas

1

Issofuncionaráparaoseuexemploepodeserfacilmenteadaptadosevocêtivercabeçalhos,maiscolunasoumaislinhas.

=IFERROR(INDEX($A$1:$A$4,SMALL(IF(ISBLANK($B$1:$B$4),"",ROW($B$1:$B$4)-ROW($C$1)+1),ROW(C1)-ROW($C$1)+1)),"")

Digite a fórmula em C1 e pressione Ctrl + Deslocamento e depois pressione Enter . Expanda a fórmula para C4 para obter os resultados completos para o seu exemplo.

Cabeçalhos ou colunas podem agora ser inseridos no exemplo e isso ainda funcionará. Para lidar com mais linhas, altere o intervalo $A$1:$A$4 e $B$1:$B$4 de acordo

Consulte também o artigo de suporte da Microsoft Como encontrar o enésimo valor que atende a uma condição .

    
por 01.05.2014 / 10:03
2

Por que não filtrar a lista? Filtrar a lista com base na coluna B para todas as linhas em que B não é em branco , por exemplo,

Então, se você precisar dele na coluna C, basta copiá-lo e colá-lo. Lembre-se de que, depois de filtrar, algumas células estarão ocultas, portanto, copiar / colar pode não parecer correto até você limpar o filtro.

    
por 01.05.2014 / 15:01
0

Tudo bem, se você precisar de uma fórmula, isso funcionará para o exemplo simples . Eu não tenho certeza sobre como expandi-lo para incluir outras colunas ( sim, eu admito que eu montei isso juntos e isso tem me frustrado ).

É uma fórmula de matriz, então CSE ( Ctrl Shft Enter ) e arraste para baixo.

=INDEX($A$2:$A$6,SMALL(IF($B$2:$B$6<>"",MATCH(ROW($B$2:$B$6),ROW($B$2:$B$6)),""),ROW(A1)))

Eu sei que essa não é a melhor maneira de fazer isso, mas até Barry , Jerry , Excellll ou alguém aparece, é o melhor que eu possuo.

    
por 02.05.2014 / 16:15