[Excel] Jak poprzez formułę pobrać nazwę arkusza ?

Excel
[Excel] Jak poprzez formułę pobrać nazwę arkusza ?

W bardzo łatwy sposób możliwe jest pobranie nazwy aktywnego arkusza posługując się językiem skryptowym VBA, który w Excelu jest wykorzystywany do pisania makr. Jednak wygodniej było by nie pisać specjalnie makra, a zamiast niego wykorzystać formułę. Niestety nie ma gotowej formuły, która by wykonała to zadanie jednak dzięki kombinacjom kilku formuł jest możliwe wyłuskanie interesującej nas informacji.

Zaczniemy od formuły która poda nam informacje o pliku i aktualnie otwartym arkuszu:

=CELL("filename")

Rezultatem jej wykonania będzie pełna ścieżka do pliku oraz nazwa aktywnego arkusza. Rozwiązanie to maj jedną wadę mianowicie niezależnie w którym arkuszu umieścimy funkcję jej rezultat będzie pokazywał nazwę arkusza aktywnego nie zaś tego w którym dana formuła się znajduje. Chcąc poprawić to działanie przekazujemy w drugim parametrze adres komórki z danego arkusza np.

=CELL("filename"; A1)

Rezultatem powyższej formuły będzie ścieżka do pliku oraz nazwa arkusza:

C:\plik.xsl[Arkusz1]

Jak widzimy ostatnią częścią informacji jest nazwa arkusza którą chcemy wyłuskać z całości informacji. Zrobimy to następującą formułą:

=MID(CELL("filename");SEARCH("]";CELL("filename"))+1;
 LEN(CELL("filename"))-SEARCH("]";CELL("filename")))

Poniżej wersja dla osób korzystających z polskiej wersji Excel-a:

=FRAGMENT.TEKSTU(KOMÓRKA("filename");SZUKAJ.TEKST("]";KOMÓRKA("filename"))+1;
DŁ(KOMÓRKA("filename"))-SZUKAJ.TEKST("]";KOMÓRKA("filename")))

Ważna informacja na koniec, wszystkie formuły zadziałają pod warunkiem że pliki będą zapisane, w przeciwnym wypadku nie zostaną wyświetlone żadne informacje.

  • jaceklogo

    Dzięki – działa 🙂

    Jakby ktoś chciał użyć tego w Excelu z polskimi nazwami formuł:

    =FRAGMENT.TEKSTU(KOMÓRKA(„filename”);SZUKAJ.TEKST(„]”;KOMÓRKA(„filename”))+1;DŁ(KOMÓRKA(„filename”))-SZUKAJ.TEKST(„]”;KOMÓRKA(„filename”)))

    • Dzięki za polską wersję, dodam do wpisu 🙂

    • DDD

      prawie Ci się udało to spolszczyć 😉

      =FRAGMENT.TEKSTU(KOMÓRKA(„nazwa_pliku”);SZUKAJ.TEKST(„]”;KOMÓRKA(„nazwa_pliku”))+1;DŁ(KOMÓRKA(„nazwa_pliku”))-SZUKAJ.TEKST(„]”;KOMÓRKA(„nazwa_pliku”)))

  • jaceklogo

    Hmmm.. A jednak nie do końca działa: funkcji „filename” zwraca nazwę „bieżącego” arkusza, a nie arkusza, na którym została uruchomiona formuła.
    Czyli, jeśli w innym arkuszu chcę użyć nazwy sąsiedniego arkusza (na którym jest podana rzeczona funkcja), to niestety ale pojawia się jako wynik formuły nazwa wybranego arkusza.
    Czy da się jakoś to obejść (nie używając VBA)

    • Wystarczy dodać jako drugi parametr komórkę z danego arkusza. Czyli w Twoim przypadku będzie to „=CELL(„filename”;A1)”

      • jaceklogo

        Teraz działa 🙂
        Dzięki serdeczne !

      • sonnen_x

        Mam skoroszyt zawierający 2 arkusze, pierwszy arkusz jest zmienny zarówno jeśli chodzi o treść, jak i o nazwę, drugi jest stały. Chciałbym, żeby ten drugi zawsze miał w jednej komórce aktualną nazwę arkusza 1, czy da się to uzyskać tą funkcją?

        • W tym przypadku należało by wskazać komórkę z pierwszego arkusza co spowoduje, że w przypadku zmiany nazwy arkusza adres w formule także się zmieni.

          Zakładając że mamy arkusz pierwszy o nazwie „Sheet1” oraz arkusz drugi „Sheet2” w którym umieszczamy poniższą formułę:

          =MID(CELL(„filename”; Sheet1!A1);SEARCH(„]”;CELL(„filename”; Sheet1!A1))+1;
          LEN(CELL(„filename”; Sheet1!A1))-SEARCH(„]”;CELL(„filename”; Sheet1!A1)))

          Teraz modyfikując nazwę arkusza formuła dalej wskazuje na właściwą komórkę w zmienionym arkuszu i wyświetla prawidłową nazwę arkusza pierwszego.

          • sonnen_x

            Nawet działa;)
            Dzięki.
            A czy możliwy jest manewr zbliżony, dokładnie chodzi o to, by arkusz 2 automatycznie podbierał nazwę arkusza umieszczonego w skoroszycie jako pierwszy od lewej?

          • Obawiam się że bez wykorzystania makr nie da się osiągnąć takiego efektu, pytanie czy chcesz wykorzystywać makra ?

          • sonnen_x

            No właśnie wolałbym ich uniknąć, ale temat nie jest zamknięty, do
            przemyślenia. Finalnie skoroszyt ma zawierać 1 arkusz niezmienny i 1 w
            którym może zmienić się jego nazwa, zawartość, bądź może on być usunięty i
            zastąpiony nowym. I o ile w pierwszych dwóch przypadkach Twoje
            rozwiązanie świetnie działa, to oczywiście w trzecim już nie, i próbuję
            znaleźć jakieś rozwiązanie.

          • Postaram się jeszcze zgłębić temat i wrócić do Ciebie z jakimś rozwiązaniem.

  • sonnen_x

    działa, dzięki

    • Druga część porady mówiła jak pobrać tylko nazwę arkusza 😉 Poniżej gotowa formuła:

      =MID(CELL(„filename”; A1);SEARCH(„]”;CELL(„filename”; A1))+1;
      LEN(CELL(„filename”; A1))-SEARCH(„]”;CELL(„filename”; A1)))