Skrypty między arkuszami w programie Excel


0

Czy można zaktualizować numer wiersza na pierwszym arkuszu z tych samych komórek w pozostałej części skoroszytu?

Mam arkusz indeksu ( Index ) z linkami do 53 innych arkuszy przez tygodnie, Wk 1 przez Wk 53. Muszę wyodrębnić dane z Index:A2 do Wk1:C19, Index:A3 do Wk2:C19, Index:A4 do Wk3:C19itd.

Próbowałem różnych odmian Index!$A(wk1!sheet()) zwrócić odniesienie do wiersza bez powodzenia.

Jedyną rzeczą, która wydaje się działać, jest napisanie absolutnego odniesienia w każdym C19 na wszystkich 53 Wk pościel.

Czy jest lepszy sposób, aby to zrobić?


Wiem, że nie będę twoim ulubionym facetem, żeby to powiedzieć, ale najlepszym sposobem byłoby skonsolidowanie danych. Posiadanie oddzielnych arkuszy dla każdego tygodnia nie spowoduje końca bólu głowy, podczas gdy gdybyś miał wszystkie dane w jednej tabeli, na jednym arkuszu i po prostu dodał kolumnę z numerem tygodnia, możesz łatwo pobrać dane z danego tygodnia na warstwa raportowania. Usprawniłoby to Twój skoroszyt, uprościło raportowanie i byłoby znacznie łatwiejsze do zmiany w przyszłości.
CLockeWork

Odpowiedzi:


1

Musisz użyć INDIRECT() aby odwołać się do zmieniającej się lokalizacji komórki i CELL („nazwa_pliku”), aby dostać się do nazwy arkusza, dzięki czemu wiesz, do którego tygodnia / wiersza należy się odwołać.

=INDIRECT("Index!A"
    &RIGHT(
        CELL("filename")
        ,LEN(CELL("filename"))-SEARCH("]",CELL("filename"))-2)
    +1)

Złammy to:

  1. Zidentyfikujmy arkusz roboczy, w którym jesteście na każdy tydzień. Przejdź do komórki C19 na karcie Wk1. Wchodzić =CELL("filename"). Ten krok wymaga najpierw zapisania skoroszytu, w przeciwnym razie nie ma nazwy pliku do rozpoznania przez program Excel.

    Powinieneś dostać coś takiego:

    C:\Users\yourname\Documents\[yourworkbook.xlsx]Wk1

  2. Teraz musimy zdjąć większość z tego, abyśmy zachowali tylko odpowiedni bit informacji, tj. Numer tygodnia. Ponieważ numer tygodnia jest zawsze ostatnią częścią ciągu, możemy użyć RIGHT() funkcja, aby go pobrać.

    Jeśli tylko wejdziesz =RIGHT(CELL("filename"),1) dostaniesz tydzień numer 1, ale działa to tylko, jeśli masz mniej niż 10 tygodni. Musimy więc uelastycznić tę funkcję i ustalić, ile cyfr chcemy zachować. 1 lub 2?

    Możemy użyć LEN() aby określić całkowitą liczbę znaków w CELL("filename"). Następnie możemy zidentyfikować liczbę znaków tylko w nazwie arkusza, odejmując długość ciągu do ] z całkowitej długości, jak poniżej:

    =LEN(CELL("filename"))-SEARCH("]",CELL("filename"))

    Daje to wartość 3 lub 4, ale nie chcemy uwzględniać dwóch znaków tworzących część „Wk” nazwy arkusza roboczego, więc odejmijmy 2, abyśmy również usunęli „Wk”:

    =LEN(CELL("filename"))-SEARCH("]",CELL("filename"))-2

    Dodając to do naszego RIGHT() funkcja jaką mamy:

    RIGHT(CELL("filename"),LEN(CELL("filename"))-SEARCH("]",CELL("filename"))-2))

    Ostatnia rzecz - na arkuszu indeksu tydzień 1 zaczyna się od wiersza 2, więc dodajmy 1, aby upewnić się, że wypisujemy prawidłowy numer wiersza:

    RIGHT(CELL("filename"),LEN(CELL("filename"))-SEARCH("]",CELL("filename"))-2))+1

  3. INDIRECT() pozwala nam korzystać z obliczeń w odwołaniu do komórki. Dodajemy nasz numer wiersza do statycznego odniesienia do „Index! A”, łącząc oba za pomocą &.

Łącząc wszystko, to:

=INDIRECT("Index!A"
    &RIGHT(
        CELL("filename")
        ,LEN(CELL("filename"))-SEARCH("]",CELL("filename"))-2)
    +1)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.