Як вказати весь аркуш як діапазон у 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 ​​() на 20% швидше, ніж використання getDataRange () з getValues ​​(). Випробували на аркуші, що містить 38 кл.
Марк Вітчак

11

Ви можете використовувати A: Z або A: AB або A: XX (останній стовпець вашої сторінки - XX):

Скріншот цього використання для застосування умовного форматування до рядків на основі значення однієї комірки


1
Ist помирає: "Denk Mal Neu"? Як це відповідає на питання?
Яків Ян Туінстра

1
Усі тут знають, як вказати діапазон. Це не було питання.

3

Google Таблиці не мають синтаксису діапазону для всього діапазону аркушів.

Наступна формула поверне діапазонну адресу всього аркуша під назвою Sheet1

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

Щоб використовувати його як посилання, покладіть його всередину INDIRECT. Наступна формула поверне масив усіх значень у Sheet1.

= ArrayFormula (
  НЕПРЯМО (
    "Лист1!"
    & АДРЕСА (1,1,, ІСТИНА)
    & ":"
    & АДРЕСА (РЯДКИ (Sheet1! A: A), КОЛОНІ (Sheet1! 1: 1), ІСТИНА)
    ,
    ІСТИНА
  )
)

1

Я не знаю конкретного, але я думаю, що ви можете використовувати деякі формули, якщо ви не знаєте кількість рядків / стовпців:

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

Ось Sheetваше ім’я аркуша, і @це довільна рядок. Якщо цей аркуш, який ви вибираєте, має @одну клітинку, він не працюватиме. Ви можете замінити його іншим символом, якщо коли-небудь аркуш містить таку комірку.

COUNITFТут підраховує кількість рядків у колонці А: А , який не містить @, який повинен бути все , якщо немає клітини , що містять його, і INDIRECTперетворення Sheet!1:###(де ###це число рядків) в фактичний обраний діапазон.


Я ціную зусилля, але, наскільки я можу сказати, ваша пропозиція не дає переваг перед тим способом, про який я згадував у своєму запитанні, але має недоліки бути більш детальним та вимагати від користувача введення символу, який ніколи не буде присутній в аркуші.
sampablokuper

@sampablokuper Щодо того, що це багатослівне, я не думаю, що я можу знайти рішення для цього, як і в другій частині, я не помітив те, що зараз додав до своєї відповіді. Крім того, наскільки я бачу, перевага, яку він має перед вашим поточним способом вирішення, полягає в тому, що вам не потрібно знати, скільки рядків або стовпців має аркуш. Але так, це наскільки це виходить :( Можливо, можна скласти функцію зі сценарію VBA.
Джеррі,

Дякую, але в моєму поточному вирішенні не потрібно знати, скільки рядків має аркуш, а також скільки стовпців, поки він має <676 стовпців.
sampablokuper

1

Найкращі відповіді вже були надані тим, хто працює в додатку, але якщо хтось там працює належним чином у Google Таблицях, то ось такий підхід може відповідати вашим потребам:

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

Пояснення : * По суті ви вказуєте діапазон за допомогою рядка, об'єднаного з кількістю рядків у імені робочого листа!

Деякі переваги такого підходу : * Це "динамічно" ... якщо ви додасте рядки в нижній частині, діапазон буде відповідним чином коригуватися * Легкий - ви можете ляпнути це у функції importrange / query.

Недоліки : * Я не пробував цього в усіх випадках, тому це може працювати лише для конкретних випадків використання. * Я особисто маю перевагу робити речі динамічними / чистими, тому користувацька функція сортів буде хорошим посередництвом між програмою і цим легким підходом


1

Це працює для мене:

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

Використовується у прив’язаному сценарії, комбінуйте назву аркуша із знаком "!" а потім отримати позначення А1 діапазону даних на обраному аркуші


0

Я зміг вибрати весь аркуш, назвавши діапазон як аркуш без знаків оклику.

У мене була вкладка з назвою даних. Замість використання даних! або дані! A1: ZZ.


Коли ми присвоюємо ім'я названому діапазону, слід вказати посилання на діапазон. Який референтний діапазон ви використовували?
Рубен

-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) на іншому аркуші (наприклад: Sheet2), ви можете використовувати наступне посилання:

=SUM(Sheet1!A1:ZZ)

^ Це підсумувати всі існуючі осередки на Лист1 і помістити значення в осередку на Аркуш2, ви можете знайти приклад тут: https://docs.google.com/spreadsheets/d/1rP3YCl3ErlYjlYGT_Q-xFvkVr7yKw6WQfHklbohL1NM/edit?usp=sharing . У цьому прикладі ми маємо 3 стовпчики та 5 рядків на Sheet1, тому ця формула = SUM (Sheet1! A1: ZZ) вибирає їх усі. Ви можете додати рядки або стовпці до Sheet1, і це рішення все одно вибере всі комірки.

PS: якщо ви проголосуєте за мою відповідь - поясніть, будь ласка, чому.


-2

Припускаючи, що ви знаєте кількість рядків, ви можете назвати весь аркуш як "ім'я робочого листа":

КРОКИ:

  1. Виберіть весь робочий аркуш
  2. Натисніть "Дані" -> "Названі та захищені діапазони"
  3. Введіть "ім'я робочого листа", щоб назвати вибір і натисніть Готово.

Тепер при кожному використанні функції "ім'я робочого листа" у функції він посилається на весь робочий аркуш.


4
Ваш метод призведе до діапазону "знімків". Додавання обох стовпців або рядків не змінить названий діапазон !!
Яків Ян Туінстра
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.