2015-08-13 10 views
7

mam następującą funkcję zapytaniapomocną Spreasheet ZAPYTANIE Function coś, co można wykorzystać w ARRAYFORMULA

=QUERY(C:J,"SELECT SUM(J) WHERE C='"&C2&"' AND H<=date'"&TEXT(H2,"yyyy-MM-dd")&"' LABEL SUM(J) ''",0) 

GDZIE C2 i H2 względnej oraz w każdym rzędzie są unikalne (C2, C3, C4, ... i H2 , H3, H4 ...)

muszę umieścić go w ARRAYFORMULA, dzięki czemu wytwarza pewną wynik na każdym rzędzie

już spędził jak cały dzień, sprawdzając wszystkie inne rozwiązania z SUMIFS i próbuje przepisać ponownie formułę MMULT, ale bez powodzenia.

Oto uproszczony przykład:

Proj Date  Hours 
APROJ 6/29/2015 81.75 
APROJ 6/22/2015 80.75 
BPROJ 8/3/2015 689 
BPROJ 8/2/2015 656 
BPROJ 8/10/2015 688 
BPROJ 8/11/2015 729 
CPROJ 8/12/2015 1757 

Moja próba bez powodzenia: = ARRAYFORMULA (MMULT ((A: A = A1: A) * (B: B < = B1: B) * N (C : C), przeniesienia (znak (kolumna (C: C)))))

Pożądany kolumna:

CHECK 
162.5 
80.75 
1345 
656 
2033 
2762 
1757 

If umieścić w każdym wzorze rzędu: = SUMA.WARUNKÓW (C $ 2: C, A 2: A "=" & A2, B 2 USD: B, "< =" & B2) działa przy ręcznym rozszerzaniu począwszy od 2.

Z góry dziękuję.

Jeśli chcesz grać, wystarczy skopiować do siebie: https://docs.google.com/spreadsheets/d/12F4EsHvkiZb5gAPVo_uosd2YpZ1nw9QED_JlSAcVQYU/edit?usp=sharing

+0

Zdobyłeś odznakę "Tumbleweed" (zadawane pytanie z zerowym wynikiem, bez odpowiedzi, bez komentarzy i niskich wyświetleń przez tydzień) =))) – alexsuslin

+0

Nic dziwnego, próbowałem zmotywować się do rozwiązania tego dla ciebie, ale to jest naprawdę nudny. –

+0

Czy można nawet obejść się bez używania javascript i funkcji niestandardowych? (* dziękuję za szczerość, teraz przynajmniej wiem, dlaczego nie ma komentarzy *) – alexsuslin

Odpowiedz

1

Oto odpowiedź:

=MMULT(TRANSPOSE(ArrayFormula(--($A$2:$A$8=TRANSPOSE(A2:A8))*--($B$2:$B$8<=TRANSPOSE(B2:B8)))),C2:C8) 

Wzór ten można przekształcić formuły bardziej ogólnym, które liczą zakresy dynamicznie, tj OFFSET(A2,,,COUNTA(A2:A)).

Objaśnienia

wykorzystujemy mmult funkcję, która jest funkcją Tablica sama. Oto Help Center info about mmult. Musimy więc przygotować dwie macierze. Pierwsza macierz z warunkami, a druga z Liczbami, które już mamy. Spróbuj wprowadzić tę część lub wzór, aby uzyskać macierz z warunkami:

=ArrayFormula(--($A$2:$A$8=TRANSPOSE(A2:A8))*--($B$2:$B$8<=TRANSPOSE(B2:B8))) 

W tej części otrzymujemy tabelę/macierz z Zoros i Ones. Preferuję użycie "-" do zamiany Boolaen na Integer: related question

Transponuj w środku, aby rozwinąć formułę. To główna sztuczka. Arrayformula nie może być używana do porównywania dwóch pionowych tablic. Musisz przetransponować jedną z nich. W pytaniu mamy dwa warunki z logiką AND: A * B. Więc mnożymy dwie części warunków. Ale myślę, że można dodać więcej niż 2 warunki. Jeśli chcesz zrobić warunek OR, musisz dodać je A + B.Niektóre przykłady:

  • (A + B) * C - [A lub B] i C
  • A + B * C - A lub [B i C]

Wniosek

To było dla mnie prawdziwe wyzwanie. Nawiasem mówiąc, znalazłem 5 różnych formuł liczyć to w górę, ale nie był w stanie przekształcić je w ArrayFormula:

  1. zapytania, wzór w swoim pytaniu
  2. SUMIFS
  3. SUMPRODUCT
  4. kwotę (filtrować (...))
  5. kwotę (jeśli (A * B, ..., 0))

Spójrz na file with example

+0

To jest niesamowite! Próbowałem wielu formuł bez powodzenia ich używania w ArrayFormula. Proszę wyjaśnić - przed formułą. – alexsuslin

+0

Dzięki, dodałem kilka wyjaśnień, proszę dać mi znać, jeśli to pomoże. –

+0

Dzięki, rozumiem część matrycową, tylko ciekawostki o "-" w formule - ($ A 2 $: 8 A $ 8 = TRANSPOZYCJA (A2: A8)) – alexsuslin

Powiązane problemy