จะระบุทั้งชีตเป็นช่วงใน Google ชีตได้อย่างไร


27

วิธีแก้ปัญหาที่ดีที่สุดที่ฉันได้พบคือ:

worksheet_name!$A$1:$YY

แต่ความนึกคิดฉันต้องการที่จะสามารถเขียนเช่น:

worksheet_name!

ดังนั้นใครรู้: มีไวยากรณ์สำหรับการระบุทั้งแผ่นเป็นช่วงหรือไม่

คำตอบ:


10

ฉันได้สร้างข้อมูลโค้ด Google Apps Script (GAS) ขนาดเล็กเพื่อทำงานให้คุณ

รหัส

function sheetRange(targetName,int) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var asName = ss.getActiveSheet().getSheetName();
  var tgSheet = ss.getSheetByName(targetName);
  var output;

  if(targetName == asName) {
    output = "Error: target sheet is active sheet !!";
  } else {
    switch(int) {
      case 1: 
        output = tgSheet.getDataRange().getValues();
        break;
      case 2:
        output = tgSheet.getSheetValues(1, 1, tgSheet.getMaxRows(),  
          tgSheet.getMaxColumns());
        break;
      default:
        output = "Choose int to be 1 or 2 !!";
    }
  }
  return output;
}

ในเมนูสเปรดชีตเลือกเครื่องมือ> ตัวแก้ไขสคริปต์และเพิ่มรหัส อย่าลืมกดปุ่มบั๊ก:
ป้อนคำอธิบายรูปภาพที่นี่

การใช้

=sheetRange("sheetName",int)

ใช้intตัวเลือกตามที่อธิบายไว้ในหมายเหตุ

ตัวอย่าง

ฉันได้สร้างไฟล์ตัวอย่างคุณ: Sheet as Range

หมายเหตุ

ในกรณีนี้มีสองวิธีในการกำหนดช่วงในสเปรดชีตผ่าน GAS:

  1. int=1; ผ่านgetDataRangeวิธีการ สิ่งนี้จะดึงช่วงซึ่งคอลัมน์สุดท้ายเป็นช่วงที่มีข้อมูลอยู่ บัญชีเดียวกันสำหรับจำนวนแถว นี่เป็นเส้นทางที่ตรงไปตรงมาที่สุด ดูชีตที่สองในไฟล์ตัวอย่าง
  2. int=2; ผ่านgetSheetValuesวิธีการ สิ่งนี้จะดึงข้อมูลช่วง "WYSIWYG" ดูแผ่นงานที่สามในไฟล์ตัวอย่าง
  3. อัตราการรีเฟรชของฟังก์ชันที่กำหนดเองประเภทนี้ไม่ได้เกิดขึ้นทันทีดังนั้นโปรดอดใจรอ การรีเฟรชข้อมูลอาจใช้เวลาหลายชั่วโมง

อ้างอิง


เหตุใดจึงใช้เวลาหลายชั่วโมงก่อนที่ฟังก์ชันนี้จะแสดงข้อมูลที่รีเฟรช ฉันคิดว่าจุดทั้งหมดของการใช้ฟังก์ชั่นเช่นนี้จะมีช่วงที่ถูกต้องเสมอหรือไม่
ClearCloud8

1
โซลูชันที่ใช้ getSheetValues ​​() เร็วกว่าการใช้ getDataRange () 20% เมื่อใช้กับ getValues ​​() ทดสอบกับแผ่นที่มีเซลล์ 38k
Mark Witczak

11

คุณสามารถใช้ A: Z หรือ A: AB หรือ A: XX (โดย XX เป็นคอลัมน์สุดท้ายของหน้าของคุณ):

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


1
Ist ตาย: "Denk Mal Neu"? คำถามนี้จะตอบคำถามได้อย่างไร
Jacob Jan Tuinstra

1
ทุกคนที่นี่รู้วิธีระบุช่วง นี่ไม่ใช่คำถาม

3

Google ชีตไม่มีไวยากรณ์ของช่วงสำหรับทั้งชีต

สูตรต่อไปนี้จะคืนค่าที่อยู่ช่วงของชีตทั้งหมดที่ชื่อ Sheet1

="Sheet1!"&ADDRESS(1,1,,TRUE)&":"&ADDRESS(ROWS(Sheet1!A:A),COLUMNS(Sheet1!1:1),,TRUE)

หากต้องการใช้เป็นข้อมูลอ้างอิงให้ใส่ไว้ด้านในของ INDIRECT สูตรต่อไปนี้จะส่งคืนอาร์เรย์ของค่าทั้งหมดใน Sheet1

= ARRAYFORMULA (
  ทางอ้อม(
    "Sheet1!"
    และที่อยู่ (1,1, TRUE)
    และ ":"
    และที่อยู่ (แถว (Sheet1 A: A) คอลัมน์ (Sheet1 1: 1) ,, TRUE)
    ,
    TRUE
  )
)

1

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

indirect("Sheet!1:"&countif(Sheet!A:A,"<>@")+countif(Sheet!A:A,"=@"))

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

COUNITFนี่นับจำนวนแถวในคอลัมน์ A: A ไม่ได้มี@ซึ่งควรจะทุกคนถ้ามีเซลล์ที่มีไม่มีมันและINDIRECTการแปลงSheet!1:###(ซึ่ง###เป็นจำนวนแถว) เป็นช่วงที่เลือกที่เกิดขึ้นจริง


ฉันซาบซึ้งในความพยายาม แต่เท่าที่ฉันสามารถบอกได้การแนะนำของคุณไม่ได้เปรียบในการแก้ปัญหาที่ฉันกล่าวถึงในคำถามของฉัน แต่มีข้อเสียของการเป็น verbose มากขึ้นและต้องการให้ผู้ใช้ป้อนอักขระที่ไม่เคยปรากฏ ในแผ่น
sampablokuper

@sampablokuper เกี่ยวกับการใช้คำพูดอย่างละเอียดฉันไม่คิดว่าฉันจะหาวิธีแก้ปัญหาสำหรับส่วนที่สองฉันมองข้ามบางสิ่งที่ฉันได้เพิ่มไว้ในคำตอบของฉัน นอกจากนี้เท่าที่ฉันเห็นประโยชน์ที่ได้จากวิธีแก้ปัญหาปัจจุบันของคุณคือคุณไม่จำเป็นต้องรู้ว่ามีชีตหรือแถวกี่แถว แต่ใช่ว่าเท่าที่จะได้รับ :( บางทีอาจจะทำให้ฟังก์ชั่นจากสคริปต์ VBA
Jerry

ขอบคุณ แต่การแก้ปัญหาปัจจุบันของฉันไม่ต้องการให้ใครรู้ว่ามีชีตกี่แถวหรือมีกี่คอลัมน์ตราบเท่าที่มันมี <676 คอลัมน์
sampablokuper

1

คำตอบที่ดีที่สุดได้รับการตอบรับแล้วสำหรับผู้ที่ใช้งานภายใน appcript แต่ถ้ามีใครที่ทำงานใน Google ชีทได้ถูกต้องแล้วนี่เป็นวิธีการที่เหมาะสมกับความต้องการของคุณ:

"worksheet_name!1:" & ROWS(worksheet_name!A:A)

คำอธิบาย : * คุณกำลังระบุช่วงโดยใช้สตริงที่ต่อเชื่อมกับจำนวนแถวในworksheet_name!

ข้อได้เปรียบบางประการของวิธีการนี้ : * เป็น 'ไดนามิก' ... หากคุณเพิ่มแถวที่ด้านล่างช่วงจะปรับตาม * จริงจัง - คุณสามารถตบมันให้เป็นฟังก์ชันการนำเข้า / แบบสอบถาม

ข้อเสีย : * ยังไม่ได้ลองในทุกกรณีดังนั้นอาจใช้ได้เฉพาะกรณีการใช้งานเท่านั้น * ฉันมีความชอบในการทำสิ่งต่าง ๆ แบบไดนามิก / ทำความสะอาดดังนั้นฟังก์ชั่นที่กำหนดเองจะเป็นพื้นกลางที่ดีระหว่าง


1

สิ่งนี้ใช้ได้กับฉัน:

var ss = SpreadsheetApp.getActive();
var sh = ss.getSheets()[0];
var rg = sh.getName() +"!"+ sh.getDataRange().getA1Notation();

ใช้ในสคริปต์ที่ถูกผูกไว้รวมชื่อแผ่นงานกับ "!" จากนั้นรับสัญกรณ์ A1 ของช่วงข้อมูลบนแผ่นงานที่เลือก


0

ฉันสามารถเลือกทั้งแผ่นได้โดยตั้งชื่อช่วงเป็นแผ่นงานโดยไม่มีเครื่องหมายอัศเจรีย์

ฉันมีแท็บชื่อข้อมูล แทนที่จะใช้ข้อมูล! หรือ data! A1: ZZ


เมื่อเรากำหนดชื่อให้กับช่วงที่มีชื่อคุณควรระบุการอ้างอิงช่วง คุณใช้ช่วงอ้างอิงอะไร
Rubén

-1

หากต้องการระบุทั้งชีทเป็นช่วงโปรดใช้:

worksheet_name!A1:ZZ

คุณสามารถลองได้ที่นี่: https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/clear

หรือถ้าคุณใช้ Java (เพื่อล้างข้อมูลทุกอย่างใน Sheet1):

Sheets service = getSheetsService(credential);
service.spreadsheets().values().clear(REPORT_WARNINGS_LATAM_FILEID, "Sheet1!A1:ZZ", new ClearValuesRequest()).execute();

หรือถ้าคุณต้องการใช้ในสูตร (ตัวอย่างเช่น: SUM) ในชีตอื่น (เช่น: ชีต 2) คุณสามารถใช้การอ้างอิงต่อไปนี้:

=SUM(Sheet1!A1:ZZ)

^ นี้จะสรุปเซลล์ที่มีอยู่ทั้งหมดบน Sheet1 และใส่ค่าในเซลล์บน Sheet2 คุณสามารถหาตัวอย่างที่นี่: https://docs.google.com/spreadsheets/d/1rP3YCl3ErlYjlYGT_Q-xFvkVr7yKw6WQfHklbohL1NM/edit?usp=sharing ในตัวอย่างนี้เรามี 3 คอลัมน์และ 5 แถวบน Sheet1 ดังนั้นสูตรนี้ = SUM (Sheet1! A1: ZZ) เลือกทั้งหมดของพวกเขา คุณสามารถเพิ่มแถวหรือคอลัมน์ใน Sheet1 และวิธีนี้จะยังคงเลือกเซลล์ทั้งหมด

PS: ถ้าคุณลงคะแนนคำตอบของฉัน - โปรดอธิบายว่าทำไม


-2

สมมติว่าคุณรู้จำนวนแถวคุณสามารถตั้งชื่อชีตทั้งหมดเป็น "worksheet_name":

ขั้นตอน:

  1. เลือกทั้งแผ่น
  2. คลิก 'ข้อมูล' -> 'ช่วงที่ตั้งชื่อและได้รับการป้องกัน'
  3. พิมพ์ "worksheet_name" เพื่อตั้งชื่อการเลือก & คลิกเสร็จสิ้น

ตอนนี้ทุกครั้งที่คุณใช้ "worksheet_name" ในฟังก์ชั่นมันจะอ้างอิงทั้งแผ่นงาน


4
วิธีการของคุณจะส่งผลให้ช่วง "ภาพรวม" การเพิ่มทั้งคอลัมน์หรือแถวจะไม่เปลี่ยนช่วงที่ตั้งชื่อ !!
Jacob Jan Tuinstra
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.