Jak odwrócić kolejność wybranych wierszy?

33

Czy istnieje prosty sposób na odwrócenie kolejności wybranych wierszy ? (A może wszystkie wiersze , jeśli to łatwiejsze).

W szczególności w tym przypadku nie ma kolumny, której można by użyć do sortowania w celu uzyskania ich w odpowiedniej kolejności. Tak więc, biorąc pod uwagę kilka wierszy w dowolnej kolejności, czy jest możliwe odwrócenie tej kolejności?

Jako przykład...

wprowadź opis zdjęcia tutaj

... po odwróceniu tych 5 wierszy „Waitrose 756” powinien być na pierwszym miejscu, a „Moot” na końcu.

Jonik
źródło
„nie ma kolumny, której można by użyć do sortowania” Dlaczego po prostu dodać kolumnę z rosnącymi wartościami (1, 2, 3, ...), posortować malejąco w tej kolumnie, a następnie usunąć?
Patrick
Jest to bardzo częste żądanie, ponieważ tak wiele osób rozpoczyna arkusz kalkulacyjny z wierszem dla każdego wpisu, dodając nowe wiersze u dołu, a następnie po 100 wierszach zdaje sobie sprawę, że chce je odwrócić, aby dodać wiersze u góry, ponieważ zajmuje to WAY za dużo czasu, aby znaleźć najniższy niepusty wiersz za każdym razem, gdy chcesz dodać nowy kawałek danych. Niestety AFAIK NIE ma takiej możliwości, nie jeśli chcesz, aby formuły i formatowanie pozostały takie same po inwersji.
Phil Goetz

Odpowiedzi:

24

Aby odwrócić kolejność wybranego zakresu (w przeciwieństwie do sortowania według określonej kolumny), możesz użyć następującego skryptu:

function reverseOrder()
{
  var range = SpreadsheetApp.getActiveRange();
  var values = range.getValues();
  range.setValues(values.reverse());
}

Dodanie tego skryptu onOpen spowoduje utworzenie elementu menu o nazwie Extra , zawierającego element o nazwie Reverse :

function onOpen ()
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menu = [{name: "Reverse", functionName: "reverseOrder"}];
  ss.addMenu("Extra", menu);
}
AdamL
źródło
3
Dzięki. Chwilę zajęło mi wymyślenie, jak je dodać, aby pojawił się element menu (Narzędzia -> Menedżer skryptów ...), ale kiedy już to zrobię, działa!
Jonik
@AdamL, Jak możemy to zrobić bez skryptów?
Pacerier
1
@AdamL: Idealny do przenoszenia tekstu, ale nie przenosi koloru tła komórki itp. W jaki sposób można rozszerzyć skrypt, aby to wykonać?
Gruber
1
@Pacerier: przepraszam za wyjątkowo późną odpowiedź, ale jednym rozwiązaniem byłoby zastosowanie kolumny pomocniczej z liczbami w porządku rosnącym i posortowanie zakresu według kolumny malejącej (a następnie można usunąć wartości pomocnika).
AdamL
@ Gruber: pierwszą opcją byłoby kopiowanie / wklejanie jednej komórki na raz przez skrypt; drugą opcją byłoby pobranie wszystkich wymaganych formatów dla zakresu, odwrócenie ich i ustawienie. Powiedziałbym, że pierwsza opcja może być odpowiednia dla małych zasięgów, ale okropna dla dużych zasięgów; druga opcja byłaby najlepszym rozwiązaniem na wszystkie przypadki użycia.
AdamL
21

Oto przykład, jak to zrobić bez użycia skryptów - pamiętaj, że ta metoda zakłada, że ​​twoje dane to tylko dane - może robić dziwne rzeczy, jeśli masz formuły odwołujące się do innych komórek w tym samym zakresie:

  1. Wstaw nową kolumnę (dla przykładu nazwiemy ją kolumną A).
  2. W A1 wpisz wartość [1]. (Możesz zacząć od A10 lub A50, jeśli chcesz tylko posortować zakres)
  3. W A2 wstaw formułę [= A1 + 1]. (Dostosuj, jeśli nie zacząłeś od A1 w kroku 2)
  4. Rozszerz formułę w A2 na dół danych, które chcesz odwrócić.

    Wszystko powinno być teraz ponumerowane od 1 do liczby wierszy w sortowanym zakresie.

  5. Wybierz wszystkie wiersze w ustawionym zakresie.
  6. Kliknij menu Dane i wybierz „Sortuj zakres według kolumny A, Z -> A”.

Twoje dane powinny teraz zostać odwrócone. Ze względu na sposób, w jaki skonfigurowaliśmy formułę numeracji, liczba zostanie zresetowana i nadal zacznie się od 1 u góry ... ale rzeczywiste dane w innych kolumnach powinny zostać odwrócone.

Mir
źródło
2
To jest tak nieprzyzwoicie łatwe, że musiałem walnąć się w czoło, bo o tym nie myślałem. Fantastyczna odpowiedź. +1.
GroggyOtter
2
W przypadku kroków 2-4 nie potrzebujesz nawet formuły. Po prostu wpisz 1 na A1, 2 na A2, wybierz oba i przeciągnij w dół tak daleko, jak to konieczne.
Patrick
4

Zgodnie z przykładem Mira możesz umieścić funkcję SORT w komórce D3, aby odwrócić kolejność danych w kolumnie C:

=sort(C3:C,A3:A,False)
artu
źródło