ADVERTISEMENT

【Googleスプレッドシート】Apps Scriptでセル範囲をマージする!mergeAcrossの使い方

【Googleスプレッドシート】Apps Scriptでセル範囲をマージする!mergeAcrossの使い方
🛡️ 超解決

スプレッドシートで複数のセルを結合したいとき、通常は「セルを結合」ボタンを使います。しかし、プログラムでセル範囲を結合したい場合には、Apps ScriptのmergeAcrossメソッドが役立ちます。この記事では、mergeAcrossの基本的な使い方から注意点までを解説します。これを読めば、スクリプトでセル結合を自在に操れるようになります。

【要点】Apps ScriptのmergeAcrossメソッドの使い方のポイント

  • mergeAcrossメソッド: 指定した範囲のセルを行方向に結合します。結合後は左上のセルの値のみが残ります。
  • RangeクラスのmergeAcross: アクティブシートの特定範囲に対して呼び出します。引数はなく、範囲オブジェクトに直接適用します。
  • 注意点: 結合前に範囲内のデータを確認しないと、値が失われる可能性があります。また、結合を解除するにはbreakApartメソッドを使用します。

ADVERTISEMENT

mergeAcrossメソッドとは何か

mergeAcrossは、GoogleスプレッドシートのRangeオブジェクトが持つメソッドの一つです。このメソッドを呼び出すと、指定した範囲のセルを水平方向(行方向)に結合します。つまり、複数の列にまたがるセルを1つのセルにまとめます。結合後は、範囲内の左上のセルの値が保持され、それ以外のセルの値は消去されます。この動作は、スプレッドシートの「セルを結合」機能のうち「横方向に結合」に相当します。mergeAcrossはスクリプトから呼び出すことで、動的なレイアウト変更や見出しの整形などを自動化できます。

mergeAcrossは、同じ行の連続したセル範囲にのみ適用できます。複数行にわたる範囲に対して呼び出すと、各行が独立して結合されます。例えば、範囲A1:B2に対してmergeAcrossを実行すると、1行目のA1とB1が結合され、2行目のA2とB2が結合されます。この動作は、縦方向の結合を行うmergeVerticallyとは異なります。mergeAcrossはあくまで水平方向の結合です。

mergeAcrossを使ったセル結合の手順

ここでは、実際にスプレッドシートにスクリプトを記述してmergeAcrossを実行する手順を説明します。サンプルとして、シートの1行目(A1からC1)を結合し、タイトル行を作成します。

  1. スクリプトエディタを開く
    スプレッドシートを開き、メニューの「拡張機能」から「Apps Script」を選択します。新しいスクリプトプロジェクトが開きます。
  2. 結合する範囲を取得する
    スクリプトエディタに以下のコードを記述します。まずアクティブシートを取得し、次に結合したい範囲を指定します。例えば、var sheet = SpreadsheetApp.getActiveSheet(); でシートを取得し、var range = sheet.getRange("A1:C1"); で範囲を取得します。
  3. mergeAcrossを実行する
    取得したRangeオブジェクトに対して、range.mergeAcross(); を呼び出します。これで範囲内のセルが水平方向に結合されます。必要に応じて、結合後に値を設定するコードも追加します。例えば、range.setValue("ここにタイトルを入力"); と記述します。
  4. スクリプトを保存して実行する
    スクリプトエディタの上部にある「保存」アイコンをクリックし、次に「実行」ボタンをクリックします。初回実行時には権限の承認が求められる場合がありますので、指示に従って承認してください。実行後、スプレッドシートに戻るとA1からC1が結合されていることを確認できます。

以下に完全なスクリプト例を示します。

function mergeCells() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange("A1:C1");
  range.mergeAcross();
  range.setValue("年度売上レポート");
  range.setFontSize(16);
  range.setHorizontalAlignment("center");
}

このスクリプトでは、結合したセルに「年度売上レポート」というテキストを設定し、フォントサイズと中央揃えを適用しています。mergeAcrossは引数を持たないため、範囲オブジェクトに対して直接呼び出すだけで完了します。

mergeAcross使用時の注意点

mergeAcrossは便利なメソッドですが、いくつか注意すべき点があります。以下に代表的な注意点をまとめます。

結合前に値が失われる

mergeAcrossを実行すると、結合範囲内の左上のセル以外の値はすべて消去されます。そのため、結合前に他のセルに重要なデータが入っていないことを確認してください。もし値を保持したい場合は、事前に別のセルにバックアップを取るか、スクリプト内で値を保存してから結合します。例えば、配列を使って範囲の値を取得しておき、結合後に必要に応じて書き戻すこともできます。

結合範囲に複数の値がある場合

前述のように、左上以外の値は失われます。例えば、A1に「りんご」、B1に「みかん」、C1に「ぶどう」と入力されている範囲A1:C1を結合すると、結合後は「りんご」だけが残り、他の値は消えます。この挙動を理解した上で使用しないと、データが意図せず消える原因になります。

結合解除はbreakApartメソッド

結合を解除したい場合は、同じRangeオブジェクトに対してbreakApart()メソッドを呼び出します。mergeAcrossと同様、範囲を指定して実行します。ただし、breakApartでは元のセルの値は左上のセルに残ります。結合前に複数のセルに値があった場合でも、結合解除後は1つのセルにしか値が戻らない点に注意してください。

マージ済みセルへの再結合

既に結合されているセルに対して再度mergeAcrossを呼び出すと、エラーになります。そのため、結合する前にその範囲が既にマージされていないか確認する必要があります。確認するには、isPartOfMerge()メソッドやgetMergedRanges()メソッドを使用します。例えば、range.isPartOfMerge()がtrueを返す場合、その範囲は既に結合の一部です。

ADVERTISEMENT

mergeAcrossと他のマージメソッドの比較

Apps Scriptには、mergeAcrossの他にmergeVerticallyとmergeがあります。これらの違いを以下の表にまとめました。

メソッド名 方向 動作
mergeAcross 水平(行方向) 指定範囲の各行内で左から右に結合
mergeVertically 垂直(列方向) 指定範囲の各列内で上から下に結合
merge 両方向 範囲全体を1つのセルに結合(全面結合)

mergeは範囲全体を1つのセルにまとめます。例えば、A1:B2に対してmergeを呼ぶと、4つのセルが1つになります。mergeAcrossは各行ごとに独立して結合するため、上記の表を参考に目的に合ったメソッドを選んでください。

まとめ

この記事では、Apps ScriptのmergeAcrossメソッドを使ってセル範囲を水平方向に結合する方法を解説しました。mergeAcrossを活用すれば、スクリプトから動的に見出しセルを作成したり、複数の列をまとめて表示したりできます。また、結合前にデータのバックアップを取る、既存のマージを確認するなどの注意点も覚えておきましょう。次は、mergeVerticallyやmergeと組み合わせて、より複雑なレイアウトをスクリプトで実現してみてください。これらのメソッドをマスターすれば、スプレッドシートの自動化の幅が大きく広がります。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。