Załóżmy, że mam kilka nazw w komórkach B1:B3
i pełną listę wszystkich nazw w A1:A4
, czy mogę wygenerować listę nazw, w A1:A4
których się nie pojawia B1:B3
?
Np. Komórki A1:A4
mają „A”, „B”, „C”, „D”, jeśli B1:B3
zawierają „A”, „C”, „D”, to chcę uzyskać „B”.
Przejrzałem listę funkcji, ale nie mogłem wymyślić, jak to zrobić.
Aktualizacja : Z pomocą Lance opracowałem formułę:
FILTER(A1:A4, A1:A4<>B1, A1:A4<>B2, A1:A4<>B3)
To daje właściwy wynik, jednak wciąż mam problem. Problem polega na tym, że moje komórki B1:Bx
mogą się rozwijać. Zarządzam drużyną sportową i korzystam z formularza Dokumentów Google, aby ludzie mogli je przesłać, wybierają oni swoje nazwisko z listy wyboru i wybierają przycisk opcji „Tak” (mogę grać) lub „Nie” (nie ma mnie). Chcę w tym miejscu wyświetlić w arkuszu kalkulacyjnym osoby, które nie odpowiedziały. Celem jest automatyczna aktualizacja tej listy po każdym nowym przesłaniu. Niestety, gdy nowe arkusze zostaną wypełnione w arkuszu kalkulacyjnym, formuła zostanie zepsuta. Nie jestem pewien, czy istnieje na to rozwiązanie.
Aktualizacja 2 : Znalazłem obejście. Najpierw skopiowałem komórki z B1:Bx
innego regionu C1:Cx
, a potem użyłem powyższej formuły, ale przeciw C1:Cx
. Teraz nawet się B1:Bx
rozwija, formuła jest nadal aktualna.
źródło
Odpowiedzi:
WOW, chciałem znaleźć ci dokładne rozwiązanie, Dokumenty Google są tak frustrujące. Miasto z pętlą skryptową.
Możesz to zrobić za pomocą funkcji arkusza FILTER, a tablicaCondition_1 jest formułą funkcji, która daje prawdziwą wartość dla każdego wiersza, który nie jest kopiowany. Widziałem, że nie można użyć funkcji MATCH.
źródło
COUNTIF
zlicza liczbę wyświetleń każdego graczaA
w kolumnieB
i zwraca tablicę zliczeń.NOT
rzutuje liczby na wartości boolowskie (prawda lub fałsz), a następnie przyjmuje odwrotność.FILTER
usuwa graczy, którzy pojawili się wB
liście odpowiedzi kolumnie.Sztuczka polega na tym,
NOT
że oblicza liczbę na booleany. Jeśli gracz nie odpowiedział, pojawi się 0 razy na liście odpowiedzi. Jeśli odpowiedzieli, pojawią się 1 lub więcej razy (być może gracz próbuje zmienić odpowiedź, przesyłając ankietę po raz drugi). 0 rzutów naFalse
i wszystkie inne liczby rzutów naTrue
. Tak więc gracze, którzy odpowiedzieli na mapęTrue
i ci, którzy jeszcze nie odpowiedzieli na mapęFalse
.NOT
następnie odwraca, dając maskę tych graczy, którzy jeszcze nie zareagowali.To rozwiązanie obsługuje rosnącą listę zgłoszeń, które mogą zawierać puste wiersze lub duplikaty zgłoszeń. Aby ograniczyć się do określonego zakresu opisanego w pytaniu, użyj:
=FILTER(A1:A4, NOT(COUNTIF(B:B,A1:A4)))
źródło
Oto arkusz kalkulacyjny pokazujący, jak można to łatwo zrobić:
Ustaw operacje w Arkuszach Google
Unia jest
={setA; setB}
Różnica jest taka
=filter(setA, iferror(MATCH(setA, setB, false)))
Skrzyżowanie jest
=filter(setA; MATCH(setA, setB, false))
Wyjaśnienie
setA
isetB
można je nazwać zakresami lub można użyć normalnego zapisu zakresu. Nazwane zakresy właśnie to wyjaśniają.Union to po prostu nowy asortyment stworzony przez zestawienie obu zakresów.
Przecięcie (następne najłatwiejsze) zależy od szukania indeksów
setA
wsetB
którym wychodzą, i filtrowania przez to zestawu A.Różnica jest podobna, ale filtry
setA
wybierają tylko członków, w których znajduje się indekssetB
.Dodatkowy kredyt
Zjednoczenie ze zduplikowaną eliminacją to po prostu setA + (setB-setA) , a więc powyżej
źródło