【GAS】同じ値のセルを自動で結合させたい (縦方向/垂直)コピペでOK

2023年4月20日

【Googleスプレッドシート】連続するセル同士を自動で結合させるスクリプトGAS(Google Apps Script)を書いてみました。方向(垂直)に連続する同じ値のセルを自動で結合させます。

空白とセル結合済みのセルは無視します。

(横方向/水平)は別の記事で書きました。

【GAS】同じ値のセルを自動で結合させたい (横方向/水平)コピペでOK
GAS 同じ値のセル同士を自動で結合させたい

使い方

Googleスプレッドシート Apps Script

スプレッドシートの「拡張機能」から「Apps Script」を選択します。

開いた先の画面で、function から始まるコードを全て消します。

Googleスプレッドシート Apps Script 無題のプロジェクト

このページの一番下のコード「GAS(Google Apps Script)」を全部コピーして貼り付けて、

そのコードの一番上から2行目に書いてある

MergeVertically('B’,2,’D’,100);//B2:D100の範囲、

の( )内を、チェックして自動セル結合させたい範囲に書き換えます。

A1:C50の範囲を指定する場合、

MergeVertically('A’,1,’C’,50);

と書き換えてください。

最後に、フロッピー💾のマークを押して保存します。

Google スプレッドシート マクロをインポート

スプレッドシートに戻って、

「拡張機能」⇨「マクロ」⇨「マクロをインポート」⇨ MergeVTestの 「 関数を追加」して、

右上の「✖︎」で閉じます。

「拡張機能」⇨「マクロ」⇨「MergeVTest」を選択してプログラムを実行します。

Googleスプレッドシート Apps Script 承認が必要

初めてプログラムを実行する場合、このような表示が出てきますので、「続行」を選択してください。

Googleスプレッドシート 「無題のプロジェクト(安全ではないページ)に移動」

次の画面で「無題のプロジェクト(安全ではないページ)に移動」を選択します。

無題のプロジェクトに以下を許可します:

次の画面で「許可」を選択してから、もう一度、

「拡張機能」⇨「マクロ」⇨「MergeVTest」を選択してプログラムを実行します。

Google スプレッドシート 自動 セル結合

選択した範囲A1:C50の、縦方向に連続して同じ値のセル同士が自動的にセル結合されていきます。

ボタンで実行したい時は

Google スプレッドシート 図形描画

「挿入」⇨「図形描画」から、

Google スプレッドシート 図形描画

適当な図形を書いて、「保存して終了」

Google スプレッドシート ボタンで Apps Scriptを実行

図形の右上あたりにある「・・・」を選択して、

「スクリプトを割り当て」、「MergeVTest」と入力して「OK」を押します。

あとは、その図形をクリックするだけでプログラムが実行されます。

縦方向に連続で同じ値のセル同士を結合するGAS(Google Apps Script

function MergeVTest(){
  MergeVertically('B',2,'D',100);//B2:D100の範囲
}

function MergeVertically(cell1,n1,cell2,n2){
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var range = sheet.getRange(cell1+n1+':'+cell2+n2);
var values = range.getValues();

for (var col = 0; col < range.getNumColumns(); col++) {//列数分処理
var colA1= range.getColumn()+col;//列Noに1(col)ずつ足していくことで現在の列Noを代入
var mCount = 1;
  for (var row = 0; row < range.getNumRows(); row++) {//行数分処理
  var rowA1 = range.getRow()+row;//行Noに1(row)ずつ足していくことで現在の行Noを代入
    //次の値のnullチェック && 空白チェック && 結合済みチェック 
    if(values[row + 1] && !sheet.getRange(rowA1+1,colA1).isBlank() && !sheet.getRange(rowA1+1,colA1).isPartOfMerge() ){      
      //次の値がnull/空白/結合済みじゃなければ、一致しているかチェック
      if (values[row][col]==values[row + 1][col] ) {
      mCount ++;
      // 一致していなくて mCountが1より大きい場合結合してmCountリセット
      }else if(mCount>1){//2行一致の時にmCount=2、3行一致の時に mCount=3、セルは値が一致している一番下のセルになる
        sheet.getRange(rowA1-mCount+1,colA1,mCount).mergeVertically();//(値が一致している一番上の行No,列No,結合する行数,結合する列数は1なので省略)を縦方向に結合
        var mCount = 1;//結合セルカウントリセット
      }
      //次の値がnull/空白/結合済みで mCountが1より大きい場合は結合してmCountリセット
      }else if(mCount>1){//2行一致の時にmCount=2、3行一致の時に mCount=3、セルは値が一致している一番下のセルになる
        sheet.getRange(rowA1-mCount+1,colA1,mCount).mergeVertically();//(値が一致している一番上の行No,列No,結合する行数,結合する列数は1なので省略)を縦方向に結合
        var mCount = 1;//結合セルカウントリセット
      //次の値がnull/空白/結合済みで mCountが1なら何もしない
      }else{}
    }
  }
}

参考サイト

【GAS】スプレッドシートの結合機能まとめ【サンプルソース付】

セルを結合または解除する【Googleスプレッドシート】 | G Suite ガイド – G Suite ガイド:G Suite の導入方法や使い方を徹底解説!

Google Apps Script

Posted by sei