Jak skopiować formułę między kolumnami i wierszami, dostosowując odwołania do komórek i nazwy arkuszy

2

Nie mogę wymyślić, jak skopiować formułę, używając kombinacji odniesień bezwzględnych i względnych oraz odniesień do nazw arkuszy.

Mam arkusz będący podsumowaniem pozostałych arkuszy w książce, przy czym każdy arkusz składowy reprezentuje miesiąc w roku. Muszę wypełnić arkusz podsumowania, kopiując komórki z odniesieniami do innych arkuszy. Kolumny z formułami muszą odzwierciedlać powiązane kolumny ze stałego wiersza na każdym arkuszu, podczas gdy wiersz z formułą musi odzwierciedlać wybór arkusza. Nazwy arkuszy oparte są na nazwie miesiąca.

Skoroszyt ma jeden arkusz na każdy miesiąc roku, styczeń, luty itd. Każdy z tych arkuszy jest identyczny i pobieram wartości z wiersza podsumowania miesiąca (wiersz 4) arkusza każdego miesiąca. Wiersz podsumowania zawiera sumy miesięczne dla różnych kategorii księgowych w kolejnych kolumnach rozpoczynających się w kolumnie E.

Każdy wiersz arkusza podsumowania zawiera wiersz podsumowania z powiązanego arkusza miesiąca.

Innymi słowy, mam to: komórka E5jest =IF(Jan!E4>0,Jan!E4," ")i chcę, aby komórka pod nią ( E6) była =IF(Feb!E4>0,Feb!E4," ").

Wtedy komórka „F5” (po prawej stronie E5) będzie =IF(Jan!F4>0,Jan!F4," ").

Załączam zrzuty ekranu strony podsumowującej i jednego z miesięcznych arkuszy.

Arkusz stycznia

Arkusz podsumowania

PatP
źródło
Po prostu kontynuuję. Czy udało nam się to dla Ciebie rozwiązać?
fixer1234
Później mam dzisiaj czas na ponowną próbę. Po tym dam ci znać. Dziękuję bardzo za całą waszą pomoc i uwagę. Bardzo mile widziane.
PatP
fixer1234 - Mój skoroszyt jest kompletny! Nie powinienem tutaj pisać „dzięki”, ale nie mogę jeszcze głosować. Możesz usunąć ten komentarz po jego przeczytaniu. Jestem TAK wdzięczna za czas, który Ty i @ReyJuna nie tylko pokazali mi, jak to zrobić, ale wyjaśnili to w sposób, który rozumiem i mogę zastosować w innych projektach później. Czapki z głów dla ciebie!
PatP

Odpowiedzi:

0

Odpowiedź Rey Juny wyjaśnia, jak to zrobić za pomocą tabeli odnośników. Oto alternatywne podejście do uzyskiwania adresów referencyjnych bez tabeli odnośników. Ogólna struktura formuły jest podobna. Wiele z tego jest podyktowanych przez przetłumaczenie lokalizacji formuł na odwołania do komórek (zwróć uwagę, że tłumaczenia lokalizacji w moich formułach mogą teraz nieco różnić się od Reya, ponieważ opis w pytaniu nieco się zmienił).

  • Chcesz, aby wiersz formuły 5 odnosił się do stycznia (miesiąc 1), więc musimy odjąć 4 od wiersza formuły.
  • Chcesz pobierać dane kolumna po kolumnie, zaczynając od kolumny E, ale zawsze z wiersza 4 arkusza docelowego.

Opis w pytaniu zmienił się, więc użyję nieco innej metody dla opcji POŚREDNIE. INDIRECT ma funkcję, która pozwala na odwoływanie się do komórek w tak zwanym formacie R1C1, co jest przydatne przy tego rodzaju wymaganiach. Możesz łatwo podać numery wierszy i kolumn oraz wykonać adresowanie względne.

INDIRECT ma opcjonalny ostatni parametr używany do wskazywania stylu odwołań do komórek. Jeśli ma wartość FAŁSZ lub 0oznacza adresowanie w stylu R1C1. W ciągu INDIRECT R4C[0]odnosi się do wiersza 4 i tej samej kolumny co formuła (przesunięcie zera).

W przeciwnym razie główna różnica polega na tym, jak uzyskać nazwy arkuszy za pomocą formuły zamiast wyszukiwania.

Kluczem do tego jest ta formuła:

TEXT((ROW()-4)*28,"mmm")

Wiersz minus 4 został wyjaśniony powyżej, tłumacząc lokalizację formuły na liczbę miesięcy. Musimy przekształcić numer miesiąca w datę, która przypada w tym miesiącu (który może być w dowolnym roku, potrzebujemy tylko dnia w roku). Czyni to mnożenie przez 28. Wszystkie miesiące oprócz lutego w roku bez przestępowania mają więcej niż 28 dni, ale to wystarcza, aby zagwarantować, że wynikowa liczba dni będzie w odpowiednim miesiącu.

(Należy pamiętać, że ta sztuczka działa w przypadku tłumaczenia 1-12 na styczeń-grudzień, ale musiałaby zostać poprawiona, jeśli twój miesiąc początkowy jest inny niż styczeń lub masz wiele kolejnych lat; nie możesz po prostu dostosować przesunięcia wiersza. Zobacz załącznik poniżej.)

Funkcja TEKST formatuje wynik jako trzyliterowy skrót miesiąca.

Podsumowując, faktyczna formuła jest następująca:

=IF(INDIRECT(TEXT((ROW()-4)*28,"mmm")&"!R4C[0]",0)>0,INDIRECT(TEXT((ROW()-4)*28,"mmm")&"!R4C[0]",0),"")

Możesz skopiować i wkleić tę formułę do komórki E5, a następnie po prostu skopiować i wkleić lub przeciągnąć, aby wypełnić macierz. Nie trzeba dostosowywać formuły, chyba że zmieni się układ arkusza roboczego.

Dodatek: Jeśli Twoje miesiące przebiegają inaczej niż styczeń-grudzień (np. Lata obrachunkowe) i / lub masz wiele kolejnych lat, oto kolejna sztuczka polegająca na użyciu konwersji pokazanej powyżej skrótu liczby miesięcy na miesiące.

  • Dokonaj korekty pierwszego wiersza, aby przełożyć numer wiersza na numer miesiąca początkowego. Powiedzmy, że pierwszy wiersz formuły to 5, a miesiącem początkowym jest październik, więc użyłbyś ROW () + 5.
  • Owinąć że z funkcji MOD zostawić resztę po podzieleniu przez 12 (grudzień wyjdzie zera, ale nadal działa) MOD(ROW()+5,12). Rezultat jest taki, że każdy wiersz wskazuje właściwy numer miesiąca.
  • Użyj że w funkcji tekstem: TEXT(MOD(ROW()+5,12)*28,"mmm").
fixer1234
źródło
@PatP, poprosiłeś o rozpoczęcie od Dec w wierszu 7 i użycie +5 zamiast -6. Nie, sztuczka nie jest taka mądra, następny rząd nadal będzie dniem w grudniu. Możesz użyć -7; arytmetyka przyniosłaby 0pierwszy dzień, który Excel widzi w grudniu poprzedniego roku, a reszta miesięcy wypadłaby dobrze. W przypadku lat innych niż styczeń-grudzień trzeba będzie zmodyfikować formułę, aby poprawnie przełożyć liczby wierszy na dni przypadające we właściwym miesiącu. To tylko sztuczka, która działa przy produkcji Jan-Deca.
fixer1234
Udało mi się sprawić, że formuła działa dla Jan-Deca w kolumnie E. Zmusiłem ją do pracy w kolumnie F, zmieniając „! E” i COLUMN () - 1 na „! F” i COLUMN () - 2 . Zakładam, że to prawda. Mam około 100 kolumn do przeniesienia formuły. Grałem z kilkoma zmianami, aby uczynić go „przeciągającym”, ale nie byłem w stanie sprawić, by działało. Nie jestem pewien, czego mi brakuje.
PatP
@PatP, czy możesz zaktualizować pytanie, aby dokładniej / całkowicie opisać swój arkusz kalkulacyjny? Może dodać zrzut ekranu? Wygląda na to, że twoje wymagania są nieco bardziej skomplikowane, niż sugeruje to pytanie. Ludziom będzie łatwiej dać ci dobre rozwiązanie, jeśli lepiej zrozumiemy wszystko, co musisz osiągnąć.
fixer1234
@PatP, dzięki za opublikowanie zdjęć i wyjaśnienie odwołań do komórek. To, co pokazuje, różni się nieco od tego, co wcześniej przewidywałem, więc zaktualizuję odpowiedź.
fixer1234
0

Takie podejście wymaga listę skróconych nazw miesięcy, które umieszczone w komórkach A1poprzez A12arkusza że nazwie ListMo, jak poniżej:

|    |  A  |
|---:|:---:|
|  1 | Jan |
|  2 | Feb |
|  3 | Mar |
|  4 | Apr |
|  5 | May |
|  6 | Jun |
|  7 | Jul |
|  8 | Aug |
|  9 | Sep |
| 10 | Oct |
| 11 | Nov |
| 12 | Dec |

Oto formuła, która trafiłaby do Twojej komórki E7:

=IF(INDIRECT(INDEX(ListMo!$A$1:$A$12,ROW()-6,) & "!E" & COLUMN()-1)>0,INDIRECT(INDEX(ListMo!$A$1:$A$12,ROW()-6,) & "!E" & COLUMN()-1)," ")

Wyjaśnienie

INDEX(ListMo!$A$1:$A$12,ROW()-6,)

Indexpozwala wybrać jeden element z tablicy / listy. Row()zwraca tylko numer wiersza, w którym znajduje się formuła, i -6jest to przesunięcie potrzebne, aby wiersz 7 był równy pierwszemu elementowi na liście „Jan”.

COLUMN()-1

Podobnie jak Row(), Column()zwróci numer kolumny, w której znajduje się twoja formuła, i -1jest to przesunięcie potrzebne do uzyskania kolumny Elub 5, aby równa się 4 w E4.

Indirectpozwala umieścić cały ten tekst razem, &a następnie przeczytać go jako odwołanie do komórki.

W przypadku komórki E7wyglądałoby to tak:

INDIRECT(INDEX(ListMo!$A$1:$A$12,1) & "!E" & 4)co wtedy byłoby równe Jan!E4.

IndirectFormuła musi się odbywać dwa razy, ponieważ to odwołanie do komórki jest używany dwa razy w formule.

Wszystko to pozwala ci przeciągnąć formułę w prawo, a jednocześnie uzyskać odwołanie do komórki, aby przejść w dół, co nie jest domyślnym zachowaniem podczas przeciągania formuł w programie Excel. Przeciągnięcie formuły w dół powoduje teraz wybranie nazwy następnego arkusza, a nazw arkuszy nie można zwiększać domyślnie.

Rey Juna
źródło
Doceniam to, że poświęciłeś mi czas na przeliterowanie tego wszystkiego. Myślę, że rozumiem większość z nich. Potrzebuję jednak wyjaśnienia dwóch kwestii. Po pierwsze, popełniłem błąd, tłumacząc moją sytuację, mówiąc, że „E7” będzie zbierał informacje z arkusza styczniowego. W rzeczywistości będzie to „E5” wskazujące na styczeń. Aby to umożliwić, zmieniłbym „ROW () - 6” na „ROW () - 4”, czy to prawda? ... kontynuował następny komentarz
PatP
Innym punktem, który jest niejasny, byłoby ustawienie go do przeciągnięcia formuły. „E5” byłby pierwszą kolumną ze wzorem, a ja przeciągałbym ją w prawo nad wieloma kolumnami. Wszystkie kolumny w tym wierszu będą ciągnąć od stycznia. Wszystkie kolumny w następnym wierszu „6” będą ciągnęły się od lutego itp. „E5” będzie pierwszą kolumną z formułą. ... kontynuował następny komentarz
PatP
Tak więc masz Podobnie jak Row (), Column () zwróci numer kolumny, w której znajduje się twoja formuła, a -1 to przesunięcie potrzebne do uzyskania kolumny E lub 5, aby równało się 4 w E4. Jeśli czytam to poprawnie, formuła mówi bieżącej komórce, aby spojrzała na komórkę po lewej stronie. Jeśli mam to prawo, co powinienem umieścić w pierwszej kolumnie?
PatP
Formuła mówi bieżącej komórce, aby spojrzała na komórkę na innym arkuszu, który jest arkuszem nazw twojego miesiąca. Poprosiłeś, aby komórka E7odwoływała się do arkusza miesiąca, E4a komórka po prawej stronie E7, czyli F7do, by odwoływała się do arkusza miesiąca E5. Właśnie to osiąga. Jeśli po prostu przeciągniesz E4odniesienie w prawo bez INDIRECT, otrzymasz odniesienie do F4. Nie jestem też pewien, co rozumiesz przez „pierwszą kolumnę”. Masz na myśli komórkę E1?
Rey Juna
Przepraszam, widziałem tylko Twój ostatni komentarz, więc na to odpowiedziałem. Tak, jeśli zaczniesz od E5zamiast, to będzie ROW()-4. A teraz, gdy przeczytałem wszystkie twoje komentarze, Ew E5jest kolumna i będzie ona przeglądać kolumnę Ena arkuszu miesiąca. Masz na myśli „pierwszy rząd”? Jeśli tak, to czy rząd nie 5byłby twoim pierwszym rzędem?
Rey Juna
-1

Znak $ w adresie komórki naprawia odwołanie do komórki lub wiersza. Jeśli masz na przykład na myśli odwołanie do komórki w wierszu 4 i skopiowanie tej formuły, możesz odwołać się do komórki E 4 USD. Gdy zostanie to skopiowane w dół kolumny, da to zawsze 4 USD. Skopiowanie go w wierszu daje 4 USD, 4 USD, 4 USD.

Jeśli konstruujesz coś w odniesieniu do kolumny miesięcy (poza schematem), możesz odnosić się do czegoś takiego (IF A1 = E 4 USD ...). To po skopiowaniu w dół zmieniłoby 1tak, aby wskazywało na A2, A3, ... które zawierałyby miesiące. E4 nadal działałby jako zmienna testowa, ale w następnej kolumnie (po skopiowaniu kolumny) będzie to 4 F $, co wskazuje na nowy test.

wendy.krieger
źródło
To nie poradzi sobie z tą sytuacją. Arkusze mają skróty nazw miesięcy, a kopiowanie wierszy w dół wymaga zmiany nazwy arkusza.
fixer1234