GoogleAppsScriptで結合セルから値を取得する方法~getRangeの指定範囲に注意

Google Apps Script(GAS)でスプレッドシート上で結合されたセルから値を取得する方法を解説します。

通常のセルと異なり、結合セルの値をGASで取得するには注意すべき点があります。

GASでスプレッドシートのセルから値を取得するには?

Google Apps Script(GAS)を使ったスクリプトではスプレッドシートのセルの値を取得するケースが多いです。

Google Apps Script(GAS)入門 スプレッドシートのセル取得・書き込み方法(getValue,setValue)

※スプレッドシートのセルの値を取得する方法は、こちらの記事で解説しています。

スプレッドシート上のセルから値を取得し、スクリプトで処理を行い、データの加工や処理を行います。

結合セルをGASで取得するには?

スプレッドシートの結合セルをGASで取得する場合も、前述で紹介した通常セルの取得方法と同じメソッドを利用します。

  1. スプレッドシートのシートを読み込む
  2. シート上の取得したいセルをgetRange()で選択
  3. 選択したセルの値をgetValue()で取得

この流れは一般的なセルの取得と何ら変わりません。

結合セルが含まれているスプレッドシートで、結合セルの値をGASで取得するには?

ただ、結合セルの場合には、GASで取得するセル範囲を指定する際に注意が必要です。

上下2つの結合セルをGASで取得

先ほど紹介したスプレッドシートの上下2つの結合セルをGoogle Apps Scriptで取得方法を考えます。

B3とB4セルを結合したセルの値「りんご」を取得を試してみます。

Google Apps Scriptでスプレッドシートの上下2つを結合したセルの値を取得するサンプルコード

こちらは、りんごの値が表示されている、B4セルの範囲をgetRangeで指定し、getValueで値を取得するコードです。

取得した値をログ出力するのですが、ログ出力の結果では値が表示されていません。

結合セルの表示位置のセルから値を取得しようとGASでgetRange+getValueしても値が取得できない

 

実はセルを上下に結合した場合、一番上のセルにしか値が格納されません。

そのため、上下2つのセルを結合したセルをGASで取得する方法は、以下のサンプルコードで実現可能です。

スプレッドシートの上下方向の結合セルから値を取得するGoogle Apps Script(GAS)のサンプルコード

function getMergedCell() {
//スクリプトが紐づくスプレッドシートのアクティブなシートを読み込む
let mySheet = SpreadsheetApp.getActiveSheet();
//結合セルの上側のB3セルを取得
let data = mySheet.getRange(3, 2).getValue();
//取得したデータをログで表示する
Logger.log(data);
}

取得する位置を結合セルの上側のB3セルをgetRangeで指定しました。

Google Apps Scriptでスプレッドシートの結合セルの値取得に成功

このように上下で結合したセルの場合は、上側のセルを参照し、値を取得します。

もし、3個以上の場合は一番上のセルが値を保持していて、残る下にあるセルは空になっています。

行・列で複数個のセルを結合したセルをGASで取得

次に、行方向と列方向それぞれにセルを結合した場合の、結合セルの値取得方法を解説します。

今回、C3:D4の4つのセルを結合したセルから、1000を取得してみます。

C3セル、C4セル、D3セル、D4セル4つのセルの値を取得して、何が表示されるか確認してみます。

GASでスプレッドシートの結合セル範囲をすべてgetRangeで指定し、getValueで取得した値を表示するサンプルコード

price変数には結合セルの各セルが配列として格納されるため、値の入り方をログ出力します。

Google Apps Scriptで結合範囲の個々のセルの値を取得してログ出力で表示した結果

1つ目のC3セルのみ値が入っている状態で、残りの3個のセルには値が入っていません。

行列方向それぞれに結合した場合、「左上のセル」にのみ値が保持されています

そのため、以下のサンプルコードのように結合セルの左上のセルをgetRangeで選択し、値を取得します。

Google Apps Script(GAS)でスプレッドシートの結合セルの値を取得する方法~サンプルコードで解説

function getMergedCell() {
//スクリプトが紐づくスプレッドシートのアクティブなシートを読み込む
let mySheet = SpreadsheetApp.getActiveSheet();
//結合セルの上側のB3セルから「りんご」を取得
let data = mySheet.getRange(3, 2).getValue();
//結合セルの中から左上のセルを指定して、りんごの値段を取得
let price = mySheet.getRange(3, 3).getValue();
//取得したデータをログで表示する
Logger.log(data);
}

2種類の結合セルの値をGoogle Apps Scriptで取得できたサンプルコードの実行結果

きちんと結合セルの値をGASコードで取得できていることが確認できます。

結合セルの値が格納されているのは左上のセルのみ

前述で紹介したGoogle Apps Scriptで結合セルを取得する2つパターンからわかるように、結合セルで値が格納されているのは、「左上のセルのみ」です。

1つ目の上下の2個を結合したセルでも見た目は下のセルに値がありそうに見えますが、上のセルにしか値は保持していません。

さらに行・列方向で結合した場合は、左上に位置するセルにのみ値が入っています。

それ以外の結合セルの位置から値を取得しようとしても値がないため、取得することができません。

実際にスプレッドシートでセル結合を解除すると、左上にしか値が残らないようになります。

このようにGASで結合セルの値を取得する際は、結合セルの中で左上のセル位置から値を取得する必要があります。

まとめ・終わりに

今回、Google Apps Script(GAS)でスプレッドシートの結合セルを読み取り、値を取得する方法を解説しました。

GASによる結合セルの値取得は、通常のセルの場合と流れは変わりません。

しかし、結合セルは結合されている範囲どこでも値が格納されているわけではなく、左上にある1つのセルにしか値を保持していません。

そのため、結合セルで左上の位置以外から取得しようとしても、値が格納されていないため、取得できません。

スプレッドシートの結合セルからGASで値を取るには、左上のセルを指定することを覚えておきましょう。