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を介してスプレッドシートの範囲を決定する方法は2つあります。

  1. int=1; getDataRangeメソッド経由。これにより、最後の列がデータを含む列である範囲が取得されます。行数についても同じことが言えます。これは通常、最も簡単なルートです。サンプルファイルの2番目のシートを参照してください。
  2. int=2; getSheetValuesメソッド経由。これにより、「WYSIWYG」範囲が取得されます。サンプルファイルの3番目のシートを参照してください。
  3. これらのタイプのカスタム関数のリフレッシュレートはすぐには反映されないため、しばらくお待ちください。データが更新されるまでに数時間かかる場合があります。

参照資料


この機能が更新されたデータを表示するのに数時間かかるのはなぜですか?私はこのような関数を使用するすべてのポイントは常に正確な範囲を持つことだと思いましたか?
ClearCloud8

1
getSheetValues()を使用したソリューションは、getValues()でgetDataRange()を使用するよりも20%高速です。38k個のセルを含むシートでテスト済み。
マークウィトザック


3

Googleスプレッドシートには、シート範囲全体の範囲構文がありません。

次の式は、Sheet1という名前のシート全体の範囲アドレスを返します。

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

参照として使用するには、INDIRECT内に配置します。次の数式は、Sheet1のすべての値の配列を返します。

= ArrayFormula(
  間接(
    「シート1!」
    &ADDRESS(1,1、、TRUE)
    & ":"
    &ADDRESS(ROWS(Sheet1!A:A)、COLUMNS(Sheet1!1:1),, TRUE)
    、
    TRUE
  )
)

1

特定のものはわかりませんが、行/列の数がわからない場合は、いくつかの式を使用できると思います。

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

これSheetはシート名であり@、任意の文字列です。選択しているシートが@1つのセルにある場合、機能しません。シートにそのようなセルが含まれている場合は、別の文字に置き換えることができます。

COUNITFここで、列Aの行数をカウント:Aは含有しない@ことを含むいかなる細胞が存在しないすべての場合であるべき、とINDIRECTの変換Sheet!1:###(ここで、###実際の選択された範囲内に行の数です)。


私は努力に感謝しますが、私が知る限り、あなたの提案は私の質問で言及した回避策よりも利点はありませんが、より冗長であり、ユーザーにこれまで存在しない文字を入力する必要があるという欠点がありますシートに。
サンパブロクパー

@sampablokuperそれが冗長であることについて、私はその解決策を見つけることができないと思います。2番目の部分については、今答えに追加したものを見落としました。また、私の知る限り、現在の回避策よりも優れている点は、シートの行数または列数を知る必要がないことです。しかし、はい、それは得る限りです:(おそらく、VBAスクリプトから関数を作成することができます。-
ジェリー

感謝しますが、私の現在の回避策では、シートの行数や、<676列の列数を知る必要はありません。
サンパブロクパー

1

appscript内で操作している人には既に最良の回答が与えられていますが、Googleスプレッドシート内で適切な作業をしている人がいる場合は、ニーズに合ったアプローチを以下に示します。

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

説明:*基本的に、worksheet_nameの行数と連結された文字列を介して範囲を指定しています

このアプローチの利点:*「動的」...行を下部に追加すると、それに応じて範囲が調整されます*軽量-これをimportrange / query関数に平手打ちできます

短所:*すべてのケースで試していないので、特定のユースケースでのみ動作する可能性があります*私は、物事を動的/クリーンにするための好みがありますので、ソートのカスタム機能は、appscriptとこの軽量アプローチの良い中間点になります


1

これは私のために働く:

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

バインドされたスクリプトで使用し、シート名と「!」を組み合わせます そして、選択したシートのデータ範囲のA1表記を取得します


0

感嘆符のない範囲をシートとして指定することで、シート全体を選択できました。

dataという名前のタブがありました。データを使用する代わりに!またはdata!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();

または、別のシート(例:Sheet2)の数式(例:SUM)で使用する場合は、次の参照を使用できます。

=SUM(Sheet1!A1:ZZ)

^これにより、Sheet1のすべての既存のセルが合計され、Sheet2のセルに値が入力されます。例はhttps://docs.google.com/spreadsheets/d/1rP3YCl3ErlYjlYGT_Q-xFvkVr7yKw6WQfHklbohL1NM/edit?usp=sharingにあります。この例では、Sheet1に3列と5行があるため、この式= SUM(Sheet1!A1:ZZ)はすべてを選択します。Sheet1に行または列を追加しても、このソリューションはすべてのセルを選択します。

PS:あなたが私の答えに反対票を投じた場合-理由を説明してください。


-2

行数がわかっていると仮定すると、シート全体に「worksheet_name」という名前を付けることができます。

手順:

  1. ワークシート全体を選択します
  2. [データ]-> [名前付き保護範囲]をクリックします
  3. 「worksheet_name」と入力して選択に名前を付け、[完了]をクリックします。

これで、関数で「worksheet_name」を使用するたびに、ワークシート全体が参照されます。


4
メソッドは、「スナップショット」範囲になります。列または行の両方を追加しても、名前付き範囲は変更されません!!
ジェイコブヤントゥインストラ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.