วิธีย้อนกลับลำดับของแถวที่เลือก?


33

มีวิธีง่าย ๆ ในการกลับลำดับของแถวที่เลือกหรือไม่ (หรือวิธีการเกี่ยวกับแถวทั้งหมดถ้าทำได้ง่ายกว่า)

โดยเฉพาะอย่างยิ่งในกรณีนี้ไม่มีคอลัมน์ที่สามารถใช้สำหรับการเรียงลำดับเพื่อให้พวกเขาอยู่ในลำดับที่ถูกต้อง ดังนั้นเมื่อได้รับแถวจำนวนมากในลำดับที่กำหนดเองเป็นไปได้หรือไม่ที่จะกลับคำสั่งนั้น?

ตัวอย่างเช่น...

ป้อนคำอธิบายรูปภาพที่นี่

... หลังจากกลับรายการของ 5 แถวเหล่านี้ "Waitrose 756" ควรมาก่อนและ "Moot" สุดท้าย


"ไม่มีคอลัมน์ที่สามารถใช้สำหรับการเรียงลำดับ" ทำไมไม่เพิ่มคอลัมน์ที่มีค่าจากน้อยไปหามาก (1, 2, 3, ... ) เรียงลำดับจากมากไปน้อยในคอลัมน์นั้นแล้วลบออก
Patrick

นี่เป็นคำขอที่พบบ่อยมากเนื่องจากผู้คนจำนวนมากเริ่มต้นสเปรดชีตที่มีแถวสำหรับแต่ละรายการเพิ่มแถวใหม่ที่ด้านล่างจากนั้นหลังจาก 100 แถวรู้ว่าพวกเขาต้องการที่จะกลับไปเพิ่มแถวที่ด้านบนเพราะใช้วิธี มีเวลามากเกินไปที่จะค้นหาแถวล่างสุดที่ไม่ว่างเปล่าทุกครั้งที่คุณต้องการเพิ่มข้อมูลใหม่ น่าเสียดายที่ AFAIK ไม่มีทางทำเช่นนั้นได้ถ้าคุณต้องการให้สูตรและการจัดรูปแบบของคุณคงเดิมหลังจากผกผัน
Phil Goetz

คำตอบ:


24

หากต้องการกลับลำดับของช่วงที่เลือก (ตรงข้ามกับการเรียงลำดับตามคอลัมน์ที่ระบุ) คุณสามารถใช้สคริปต์ต่อไปนี้:

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

การเพิ่มสคริปต์ onOpen นี้จะสร้างรายการเมนูพิเศษที่มีรายการที่เรียกว่าย้อนกลับ :

function onOpen ()
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menu = [{name: "Reverse", functionName: "reverseOrder"}];
  ss.addMenu("Extra", menu);
}

3
ขอบคุณ ฉันใช้เวลาสักครู่หาวิธีเพิ่มสิ่งเหล่านี้เพื่อให้รายการเมนูปรากฏขึ้น (เครื่องมือ -> เครื่องมือจัดการสคริปต์ ... ) แต่เมื่อฉันทำเสร็จแล้วมันจะทำงาน!
Jonik

@ AdamL เราจะทำสิ่งนี้โดยไม่ใช้สคริปต์ได้อย่างไร
Pacerier

1
@ AdamL: ยอดเยี่ยมสำหรับการย้ายข้อความ แต่มันล้มเหลวในการย้ายสีพื้นหลังของเซลล์ ฯลฯ สคริปต์สามารถขยายเพื่อดำเนินการได้อย่างไร
Gruber

1
@Pacerier: ขออภัยในการตอบกลับช้าพิเศษ แต่วิธีแก้ปัญหาหนึ่งจะมีคอลัมน์ตัวช่วยที่มีตัวเลขตามลำดับจากน้อยไปหามากและเรียงช่วงตามคอลัมน์นั้นจากมากไปน้อย
AdamL

@Gruber: ตัวเลือกแรกสำหรับสคริปต์เพื่อคัดลอก / วางหนึ่งเซลล์ในเวลา; ตัวเลือกที่สองจะได้รับทุกรูปแบบที่จำเป็นสำหรับช่วงกลับพวกเขาเช่นกันและตั้งค่า ฉันว่าตัวเลือกแรกอาจโอเคสำหรับช่วงขนาดเล็ก แต่แย่มากสำหรับช่วงขนาดใหญ่ ตัวเลือกที่สองจะเป็นทางออกที่ดีที่สุดที่จะครอบคลุมทุกกรณีการใช้งาน
AdamL

21

นี่คือตัวอย่างของวิธีการทำเช่นนี้โดยไม่ต้องใช้สคริปต์ - โปรดทราบว่าวิธีนี้ถือว่าข้อมูลของคุณเป็นเพียงข้อมูล - มันอาจทำสิ่งแปลก ๆ ถ้าคุณมีสูตรที่อ้างอิงเซลล์อื่น ๆ ในช่วงเดียวกัน:

  1. แทรกคอลัมน์ใหม่ (เพื่อตัวอย่างเราจะเรียกมันว่าคอลัมน์ A)
  2. ใน A1 ให้ใส่ค่า [1] (คุณสามารถเริ่มต้นที่ A10 หรือ A50 หากคุณต้องการเรียงลำดับช่วงเท่านั้น)
  3. ใน A2 ให้ใส่สูตร [= A1 + 1] (ปรับถ้าคุณไม่ได้เริ่มที่ A1 ในขั้นตอนที่ 2)
  4. ขยายสูตรใน A2 ไปที่ด้านล่างของข้อมูลที่คุณต้องการย้อนกลับ

    ตอนนี้ทุกอย่างควรจะมีหมายเลขตั้งแต่ 1 ถึงจำนวนแถวในช่วงที่คุณเรียงลำดับ

  5. เลือกแถวทั้งหมดในช่วงที่คุณตั้งค่า
  6. คลิกที่เมนูข้อมูลและเลือก "จัดเรียงช่วงตามคอลัมน์ A, Z -> A"

ข้อมูลของคุณควรจะกลับคำสั่ง เนื่องจากวิธีที่เราตั้งค่าสูตรการกำหนดหมายเลขจะได้รับการตั้งค่าใหม่และยังคงเริ่มจาก 1 ที่ด้านบน ... แต่ข้อมูลจริงในคอลัมน์อื่น ๆ ควรกลับด้านทั้งหมด


2
นี่เป็นเรื่องง่ายมากที่ฉันจะตบหน้าผากของฉันโดยไม่ได้คิดถึงมัน คำตอบที่ยอดเยี่ยม +1
GroggyOtter

2
สำหรับขั้นตอนที่ 2-4 คุณไม่จำเป็นต้องมีสูตร เพียงป้อน 1 ใน A1, 2 ใน A2 เลือกทั้งคู่แล้วลากลงไปตามที่ต้องการ
Patrick

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.