Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Skrypt Arkusza Google - Konwersja funkcji makr z Excel 2007 do arkusza google

DjLeo 03 Paź 2012 15:26 4737 6
  • #1 03 Paź 2012 15:26
    DjLeo
    Poziom 9  

    Witam

    Mam mały problem z przeniesieniem funkcji makra excela do google.
    Problem polega na tym, że do arkusza google nie można importować plików exela z makrami. Potrzebuję skrypt lub ewentualnie funkcję w dla arkusza google która sprawdza i wyświetla
    ostatnią wartość w danej kolumnie pomijając pola puste.

    W Excelu wygladało to tak:

    Function Ostatnia(Kol As String) As Variant
    Ostatnia = Range(Kol & Cells(Rows.Count, Kol).End(xlUp).Row).Value
    End Function


    Natomiast w arkuszu google nie da się tego wrzucić (inny język i brak obsługi makr). Czy ktoś może potrafiłby przerobić to makro na skrypt działajacy w arkuszu kalkulacyjnym Google? Może istnieje jakiś konwerter makr do skryptów google?

    Z góry dziękuję za pomoc.

    0 6
  • #2 03 Paź 2012 19:54
    kradam
    Poziom 14  

    Zainteresowało mnie Twoje pytanie, nie wiedziałem że docsy mają swoje "VBA". Najpierw zacząłem grzebać po dokumentacji, ale zniechęcony znalazłem gotową odpowiedź na stackoverflow:

    Kod: javascript
    Zaloguj się, aby zobaczyć kod

    0
  • #3 03 Paź 2012 23:04
    DjLeo
    Poziom 9  

    Dziękuję za odpowiedzi i za skrypt. Niestety arkusz kalkulacyjny od Google jest bardzo problematyczny. A skrypt nie działa do końca prawidłowo ale to wina chyba google ewentualnie tego skryptu.

    Dane się nie odświeżają, prawidłowa wartość pojawia się jednorazowo przy wpisaniu formuły a później praktycznie w ogolę się nie zmienia przy dopisywaniu danych do kolumny czy odświeżeniu arkusza. Ale coś ciekawszego odkryłem.

    Kolumna w której potrzebuję ostatnią wartość jest tak na prawdę godziną (np. 1:00).
    Ja potrzebuję pobrać do innej komórki ostatnią godzinę w danej kolumnie. A ten skrypt działa tak, że niby pobiera tę godzinę (o ile pobierze w ogóle) ale co ciekawe dodaje do czasu 50minut i 39 sekund. Czyli np. ostatnia godzina w kolumnie A to powiedzmy 02:00:00 (2 godzina w nocy) a do komórki zostanie pobrane 02:50:39.
    Zawsze dodaje ten sam czas. Nie istotne jaką godzinę wpiszę w kolumnie.

    Ale to jeszcze nie koniec. Na kolegi koncie użyłem tego samego skryptu w ten sam sposób i u niego odejmuje 24 minuty :) No cyrki.

    Przydało by się rozwiązać tę zagadkę i 2 problemy:

    1. Aby dane wyświetlały się natychmiast.
    2. Aby dane wyświetlały się prawidłowo (jeżeli chodzi o czas-godzinę ponieważ same liczby pobiera prawidłowo)

    PS. Zauważyłem właśnie, że problem jest z komórkami w których użyłem już formuły: =lastValue("A") jeżeli raz użyję w danej komórce to ona tak jak by zapisuje wynik i nie zmienia się. Jeśli wkleję formułę do innej komórki to nowe wartości się pobierają.

    Ma ktoś jakiś pomysł? Skrypt Arkusza Google - Konwersja funkcji makr z Excel 2007 do arkusza google

    0
  • #4 04 Paź 2012 08:18
    kradam
    Poziom 14  

    Rzeczywiście skonstruowana w ten sposób funkcja spowoduje problemy z odświeżaniem jej wyniku po zmianie komórek na niego wpływających. Dzieję się tak chyba dlatego, że kolumna do funkcji podawana jest jako tekst ("A") a nie jako zakres danych arkusza. Poniższy kod rozwiązuje problem:

    Kod: javascript
    Zaloguj się, aby zobaczyć kod


    Jego poprawne wywołanie to przykładowo dla całej kolumny A:
    Code:
    =lastValue(A:A)


    Przyznam, że zabił mnie problem z dodawaniem minut do wyniku w poprzedniej wersji funkcji, u mnie akurat odejmowało :-). Nowa wersja funkcji jest pozbawiona tej wady i nie wiem czy jest sens wnikać co było problemem.

    0
  • #5 18 Paź 2012 14:32
    DjLeo
    Poziom 9  

    Dzięki kradam.

    Dziwny ten bug znalazłem z tym dodawaniem daty. Ciekawe dlaczego u każdego jest inaczej :) Ale masz racje nie ma co wnikać. Co ciekawe znalazłem rozwiazanie problemu bez użycia skryptu. Oto one:

    Wersja Excel (formuła tablicowa):

    Cytat:
    =INDEKS(A:A;MAX((A:A<>"")*WIERSZ(A:A)))

    Wersja Google:
    Cytat:
    =ARRAYFORMULA(INDEX(A:A;MAX((A:A<>"")*ROW(A:A))))


    Szokująco banalne ale działa w 100% i nie stwarza, żadnych problemów z dowolnym typem danych :)

    0
  • #6 18 Paź 2012 14:50
    kradam
    Poziom 14  

    Rozumiem, że nazwy funkcji na angielskie trzeba zmienić. Bo polskich wersji funkcji to chyba jeszcze nie ma? Gdyby ktoś chciał wiedzieć, to ta formuła mnoży numery wierszy w zadanej kolumnie przez 0 jeśli komórka w tym wierszu jest pusta lub 1 jeśli jest zapełniona. Następne wybiera maksimum ze zbioru tych iloczynów, które jest numerem wiersza w tej kolumnie ostatniej niepustej wartości. Jestem pod wrażeniem pomysłowości autora.

    0
  • #7 18 Paź 2012 15:07
    DjLeo
    Poziom 9  

    Tak zgadza się, nie dodałem iż powyższe jest dla Excela a dla Google wygląda to tak:

    Cytat:
    =ARRAYFORMULA(INDEX(A:A;MAX((A:A<>"")*ROW(A:A))))


    Na prawdę działa to w google bez zarzutu. W przypadku Excela trzeba pamiętać, że jest to formuła tablicowa. Bo inaczej nie zadziała prawidłowo (dodajemy ją ctrl+shift+enter) w przypadku google wystarczy dopisać "=ARRAYFORMULA()" i efekt jest ten sam.

    0