Como fazer uma operação de conjunto simples na planilha do Google Docs?

10

Suponha que eu tenha alguns nomes nas células B1:B3e uma lista completa de todos os nomes A1:A4, é possível gerar uma lista de nomes A1:A4que não aparecem B1:B3?

Por exemplo, as células A1:A4têm "A", "B", "C", "D", se B1:B3contiverem "A", "C", "D", então eu quero obter "B".

Examinei a lista de funções, mas não consegui descobrir como fazê-lo.

Atualização : Com a ajuda de Lance, a fórmula que inventei foi:

FILTER(A1:A4, A1:A4<>B1, A1:A4<>B2, A1:A4<>B3)

Isso dá o resultado certo, mas ainda tenho um problema. O problema é que minhas células B1:Bxpodem se expandir. Estou gerenciando uma equipe esportiva e, usando um formulário do Google Docs para que as pessoas enviem, elas selecionam seu nome em uma lista de opções e escolhem um botão de opção "Sim" (eu posso jogar) ou "Não" (saio). O que eu quero alcançar aqui é exibir na minha planilha as pessoas que não responderam. O objetivo é atualizar esta lista automaticamente após cada novo envio. Infelizmente, quando novas linhas são preenchidas na planilha, a fórmula seria estragada. Não tenho certeza se existe uma solução para isso.

Atualização 2 : Encontrei uma solução alternativa. Copiei as células de B1:Bxpara outra região C1:Cxprimeiro e depois usei a fórmula acima, mas contra C1:Cx. Agora, mesmo se B1:Bxexpande, a fórmula ainda é válida.

grokus
fonte
A solução para o problema de expansão é usar um intervalo nomeado. Provavelmente, será necessário algum trabalho para obter o filtro correto.
Lance Roberts
@ Lance, encontrei uma solução alternativa e atualizei minha postagem novamente. Obrigado.
grokus
1
Ótima pergunta, eu a encontrei enquanto procurava por essa resposta. Sua solução alternativa é muito boa, mas acho que finalmente consegui exatamente o que você estava procurando. Confira minha resposta abaixo.
Anthony DiSanti 16/07/2015

Respostas:

4

WOW, eu estava indo buscar uma solução exata, o Google Docs é tão frustrante. Cidade de loop de script.

Você pode fazer isso com a função de planilha FILTER, com sua arrayCondition_1 sendo uma fórmula de funções que fornece um valor verdadeiro para cada linha que não é enganada. Pude ver que a função MATCH não podia ser usada.

Lance Roberts
fonte
1
Descobri que usar o Chrome é muito melhor quando se lida com o Google Docs.
grokus
Hoje é uma loucura para mim, mas se me lembro, farei uma rachadura nesta semana que vem (se a resposta ainda não tiver sido encontrada).
Lance Roberts
tudo bem, consegui usar o FILTER para obter os resultados desejados. Obrigado.
grokus
@Grokus, ótimo, você deve postar a fórmula usada para referência futura do leitor.
Lance Roberts
Eu atualizei minha postagem original.
grokus
4
=FILTER(A:A, NOT(COUNTIF(B:B, A:A)))

COUNTIFconta o número de vezes que cada jogador na coluna Aaparece na coluna Be retorna uma matriz das contagens.

NOT lança os números em valores booleanos (verdadeiro ou falso) e, em seguida, assume o inverso.

FILTERremove os jogadores que apareceram na Blista de respostas da coluna.

O truque aqui é que NOTlança as contagens para os booleanos. Se um jogador não responder, ele aparecerá 0 vezes na lista de respostas. Se eles responderem, aparecerão 1 ou mais vezes (talvez um jogador tentando alterar sua resposta enviando a pesquisa uma segunda vez). 0 lança para Falsee todos os outros números lançados para True. Portanto, os jogadores que responderam mapeiam Truee os que ainda não responderam mapeiam False. NOTentão pega o inverso, dando a você uma máscara desses jogadores ainda a responder.

Esta solução oferece suporte a uma lista crescente de envios que podem incluir linhas em branco ou envios duplicados. Para limitar ao intervalo específico descrito na pergunta, use:=FILTER(A1:A4, NOT(COUNTIF(B:B,A1:A4)))

Anthony DiSanti
fonte
20charlimit gênio
Fadeway
0

Aqui está uma planilha mostrando como isso pode ser feito facilmente:

Definir operações no Planilhas Google

União é ={setA; setB}

Diferença é =filter(setA, iferror(MATCH(setA, setB, false)))

A interseção é =filter(setA; MATCH(setA, setB, false))

Explicação setAe setBpode ser nomeado intervalos ou você pode usar a notação de intervalo normal. Intervalos nomeados apenas tornam isso mais claro.

A união é apenas uma nova faixa feita justapondo as duas faixas.

Intersecção (ao lado mais fácil) depende procurando índices de setAno setBonde sai, e filtrar Seta por isso.

A diferença é semelhante, mas filtros setApara selecionar apenas membros em que a localização do índice setBnão é encontrada.

Crédito extra

A união com eliminação duplicada é apenas setA + (setB-setA) , portanto, pelos itens acima

={setA;filter(setB, iserror(MATCH(setB,setA,false)))}
Marc Meyer
fonte