Bagaimana cara menentukan seluruh sheet sebagai rentang di Google Sheets?


27

Solusi terbaik yang saya temukan sejauh ini adalah:

worksheet_name!$A$1:$YY

tetapi idealnya saya ingin dapat menulis, misalnya:

worksheet_name!

Jadi, apakah ada yang tahu: apakah ada sintaks untuk menentukan seluruh lembar sebagai rentang?

Jawaban:


10

Saya telah membuat cuplikan Google Apps Script (GAS) kecil, untuk melakukan pekerjaan untuk Anda.

Kode

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;
}

Di menu spreadsheet, pilih Alat> Editor skrip, dan tambahkan kode. Pastikan untuk menekan tombol bug:
masukkan deskripsi gambar di sini

Pemakaian

=sheetRange("sheetName",int)

Gunakan intopsi seperti yang dijelaskan dalam komentar.

Contoh

Saya telah membuat contoh file untuk Anda: Sheet as Range

Komentar

Dalam hal ini, ada dua cara untuk menentukan rentang dalam spreadsheet melalui GAS:

  1. int=1; Melalui getDataRangemetode. Ini akan mengambil rentang, di mana kolom terakhir adalah yang memiliki data di dalamnya. Akun yang sama untuk jumlah baris. Ini biasanya rute yang paling mudah. Lihat lembar kedua dalam file contoh.
  2. int=2; Melalui getSheetValuesmetode. Ini akan mengambil rentang "WYSIWYG". Lihat lembar ketiga dalam file contoh.
  3. Refresh rate dari jenis fungsi kustom ini tidak langsung, jadi harap bersabar. Diperlukan beberapa jam untuk menyegarkan data.

Referensi


Mengapa perlu beberapa jam untuk fungsi ini menampilkan data yang disegarkan? Saya pikir inti dari menggunakan fungsi seperti ini adalah untuk selalu memiliki rentang yang akurat?
ClearCloud8

1
Solusi menggunakan getSheetValues ​​() adalah 20% lebih cepat daripada menggunakan getDataRange () dengan getValues ​​(). Diuji dengan lembaran yang mengandung sel 38k.
Mark Witczak

11

Anda dapat menggunakan A: Z atau A: AB atau A: XX (dengan XX sebagai kolom terakhir dari halaman Anda):

Cuplikan layar menggunakan ini untuk menerapkan pemformatan bersyarat ke baris berdasarkan pada nilai sel tunggal


1
Ist meninggal: "Denk Mal Neu"? Bagaimana ini menjawab pertanyaan?
Jacob Jan Tuinstra

1
Semua orang di sini tahu cara menentukan rentang. Ini bukan pertanyaannya.

3

Google Sheets tidak memiliki sintaks rentang untuk seluruh rentang sheet.

Rumus berikut akan mengembalikan alamat rentang seluruh lembar bernama Sheet1

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

Untuk menggunakannya sebagai referensi, letakkan di dalam INDIRECT. Rumus berikut akan mengembalikan array dari semua nilai di Sheet1.

= ArrayFormula (
  TIDAK LANGSUNG (
    "Sheet1!"
    & ALAMAT (1,1,, BENAR)
    & ":"
    & ALAMAT (BARIS (Sheet1! A: A), COLUMNS (Sheet1! 1: 1) ,, BENAR)
    ,
    BENAR
  )
)

1

Saya tidak tahu yang spesifik, tapi saya pikir Anda bisa menggunakan beberapa rumus jika Anda tidak tahu jumlah baris / kolom:

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

Di sini, Sheetadalah nama lembar Anda, dan @merupakan string arbitrer. Jika lembar yang Anda pilih ada @dalam satu sel, itu tidak akan berfungsi. Anda dapat menggantinya dengan karakter lain jika lembar tersebut berisi sel seperti itu.

Di COUNITFsini menghitung jumlah baris dalam kolom A: A tidak mengandung @, yang seharusnya menjadi semua jika tidak ada sel yang mengandungnya, dan INDIRECTmengubah Sheet!1:###(di mana ###jumlah baris) menjadi rentang yang dipilih sebenarnya.


Saya menghargai upaya ini, tetapi sejauh yang saya tahu, saran Anda tidak menghasilkan keuntungan dibandingkan dengan solusi yang saya sebutkan dalam pertanyaan saya, tetapi memiliki kelemahan karena lebih banyak bicara dan mengharuskan pengguna untuk memasukkan karakter yang tidak akan pernah ada dalam lembar.
sampablokuper

@sampablokuper Tentang hal itu sedang lisan, saya tidak berpikir saya bisa menemukan solusi untuk itu, karena untuk bagian kedua, saya mengabaikan sesuatu yang sekarang saya tambahkan ke jawaban saya. Juga, sejauh yang saya bisa lihat, keuntungan yang didapatnya dari penyelesaian Anda saat ini adalah Anda tidak perlu tahu berapa banyak baris atau kolom yang dimiliki lembar tersebut. Tapi ya, sejauh yang ia dapat :( Mungkin orang bisa membuat fungsi dari skrip VBA.
Jerry

Terima kasih, tetapi solusi saya saat ini tidak memerlukan satu untuk mengetahui berapa banyak baris yang dimiliki sheet, atau berapa banyak kolom yang dimilikinya selama ia memiliki <676 kolom.
sampablokuper

1

Jawaban terbaik telah diberikan bagi mereka yang beroperasi di dalam skrip apps, tetapi jika ada orang di luar sana yang bekerja dengan baik dalam Google Sheets, maka inilah pendekatan yang sesuai dengan kebutuhan Anda:

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

Penjelasan : * Anda pada dasarnya menentukan rentang melalui string yang digabungkan dengan jumlah baris di worksheet_name!

Beberapa keuntungan dari pendekatan ini : * Ini 'dinamis' ... jika Anda menambahkan baris ke bawah, rentang akan menyesuaikan sesuai * Ringan - Anda dapat menampar ini ke fungsi importrange / query

Kekurangan : * Belum mencobanya dalam semua kasus jadi mungkin hanya bekerja untuk kasus penggunaan khusus * Saya pribadi memiliki preferensi untuk membuat hal-hal menjadi dinamis / bersih sehingga fungsi kustom semacam itu akan menjadi jalan tengah yang baik antara appscript dan pendekatan ringan ini


1

Ini bekerja untuk saya:

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

Digunakan dalam skrip terikat, gabungkan sheetname dengan "!" dan kemudian mendapatkan notasi A1 dari rentang data pada lembar yang dipilih


0

Saya dapat memilih seluruh lembar dengan menyebutkan rentang sebagai lembar tanpa tanda seru.

Saya memiliki tab bernama data. Alih-alih menggunakan data! atau data! A1: ZZ.


Saat kami menetapkan nama ke rentang bernama, referensi rentang harus ditentukan. Rentang referensi apa yang Anda gunakan?
Rubén

-1

Untuk menentukan seluruh sheet sebagai rentang, silakan gunakan:

worksheet_name!A1:ZZ

Anda dapat mencobanya di sini: https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/clear

atau jika Anda menggunakan Java (untuk menghapus semua yang ada di Sheet1):

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

atau jika Anda hanya ingin menggunakannya dalam rumus (misalnya: SUM) di lembar lain (misalnya: Sheet2) Anda dapat menggunakan referensi berikut:

=SUM(Sheet1!A1:ZZ)

^ Ini akan meringkas semua sel yang ada pada Sheet1 dan menempatkan nilai dalam sel pada Sheet2, Anda dapat menemukan contoh di sini: https://docs.google.com/spreadsheets/d/1rP3YCl3ErlYjlYGT_Q-xFvkVr7yKw6WQfHklbohL1NM/edit?usp=sharing . Dalam contoh ini kita memiliki 3 kolom dan 5 baris pada Sheet1, jadi rumus ini = SUM (Sheet1! A1: ZZ) memilih semuanya. Anda bisa menambahkan baris atau kolom pada Sheet1 dan solusi ini masih akan memilih semua sel.

PS: jika Anda memilih jawaban saya - mohon jelaskan mengapa.


-2

Dengan asumsi Anda tahu jumlah baris, Anda dapat memberi nama seluruh sheet sebagai "worksheet_name":

TANGGA:

  1. Pilih seluruh lembar kerja
  2. Klik 'Data' -> 'Named and Protected Ranges'
  3. Ketik "worksheet_name" untuk memberi nama pilihan & klik Selesai.

Sekarang setiap kali Anda menggunakan "worksheet_name" dalam suatu fungsi, itu akan mereferensikan seluruh lembar kerja.


4
Metode Anda akan menghasilkan rentang "foto". Menambahkan kolom atau baris tidak akan mengubah rentang bernama !!
Jacob Jan Tuinstra
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.