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で取得するセル範囲を指定する際に注意が必要です。

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

まとめ・終わりに

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

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

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

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

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