1. ホーム
  2. arrays

[解決済み] Google スプレッドシートで範囲を結合する方法

2023-01-28 22:45:12

質問

任意のGoogleスプレッドシートから範囲を結合したい。

シート1!A:A

{12, 131, 45}

シート2!A:A

{12, 131, 46}

未知の関数

=formula_for_union_range(Sheet1!A:A; Sheet2!:A:A)

を返すべき

{12, 131, 45, 12, 131, 46}

質問

どのように可能なのでしょうか?

どのように解決するのですか?

Google Appsスクリプト

なのに、質問はスクリプトについてでした。やはり以下のコードで成功しています。

function unionRanges(e) {
  var result = [];
  var length = 0;
  var i = 0;
  try {
    for (i = 0; i < arguments.length; i++)
      length += arguments[i].length;
    if (length > 3000) return '#BIGRANGE';
    for (var i = 0; i < arguments.length; i++)
      result = result.concat(arguments[i].filter(function (el) {
        return el.join('').length > 0
      }));
    return result;
  } catch (err) {
    return JSON.stringify(err);
  }
}

表計算機能

しかし、上述したように、より簡単に {} という-notationを使う方が簡単です。

={ Sheet1!A1:C10 ; Sheet2!A1:C34 }

縦連結

={ Range(Cols=N) ; Range(Cols=N) }

水平方向の連結

={ Range(Rows=M) , Range(Rows=M) }

を組み合わせることが可能です。

={ { , , } ; { , , } }

あるいはもっとハードなもの

={{{;;},{;;}};{{;;},{;;}};{{;;},{;;}}}

こんな感じにしてみてください。

={
   {{ 1; 2; 3},{ 4; 5; 6}};
   {{ 7; 8; 9},{10;11;12}};
   {{13;14;15},{16;17;18}}
 }

内部での水平方向の連結は必要ありません

={
    { 1; 2; 3},{ 4; 5; 6};
    { 7; 8; 9},{10;11;12};
    {13;14;15},{16;17;18}
}

引数区切り文字のロケール依存性

現在のロケールが , を引数の区切り文字として使っている場合は ; で縦に連結し , は水平方向の連結を表します。

それ以外の場合は、引数のデリミタが ; であり ;\ (スペースなし)をそれぞれ指定します。

シート 'Data 1'!A1:C20

|   Name  |    Date   | Sum |
| Ethan   |  3/4/2017 |  31 |
| Logan   |  3/6/2017 |  62 |
| Brian   | 3/26/2017 |  61 |
|   ...   |     ...   | ... |

シート 'Data 2'!A1:C20

|  Name   |    Date   | Sum |
| Nathan  | 3/30/2017 |  53 |
| Alyssa  | 3/13/2017 |  72 |
| John    | 3/24/2017 |  79 |
| Megan   | 3/16/2017 |  10 |
|   ...   |     ...   | ... |

連結

縦連結

={'Data 1'!A1:C20;'Data 2'!A2:C20}

結果発表

|  Name  |    Date   | Sum |
| Ethan  |  3/4/2017 |  31 |
| Logan  |  3/6/2017 |  62 |
| Brian  | 3/26/2017 |  61 |
| ...    |       ... | ... |
| Nathan | 3/30/2017 |  53 |
| Alyssa | 3/13/2017 |  72 |
| John   | 3/24/2017 |  79 |
| ...    |       ... | ... |

水平方向の連結

={TRANSPOSE('Data 1'!A1:C20),TRANSPOSE('Data 2'!A2:C20)}

結果発表

| Name |   Ethan  |   Logan  |   Brian   | ... |   Nathan  |   Alyssa  |    John   |
| Date | 3/4/2017 | 3/6/2017 | 3/26/2017 | ... | 3/30/2017 | 3/13/2017 | 3/24/2017 |
| Sum  |       31 |       62 |        61 | ... |        53 |        72 |        79 |

これについての詳細 Google スプレッドシートで範囲を連結する方法