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

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

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

(縦方向/垂直)は別記事で書いています。

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

使い方

Googleスプレッドシート Apps Script

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

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

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

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

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

MergeAcross('A’,5,’U’,7);//A5:U7の範囲、

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

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

MergeAcross('A’,1,’U’,50);

と書き換えてください。

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

より詳しいスプレッドシート(Google Apps Script)の導入方法は下記記事を参照してください。

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

横方向/水平方向に連続で同じ値のセル同士を結合するGAS(Google Apps Script)

function MergeATest(){
  MergeAcross('A',5,'U',7);//A5:U7の範囲
}

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

//Logger.log (range.getA1Notation());//A1表記
//Logger.log( range.getColumn())// 範囲の最初の列No (スプレッドシート全体で見た時のNo)
//Logger.log( range.getLastColumn())// 範囲の最後の列No (スプレッドシート全体で見た時のNo)
//Logger.log(range.getNumColumns());// 範囲の列数
//Logger.log(values[0].length);//値の列数
//Logger.log(range.getTextDirection());
//Logger.log( range.getRow())// 範囲の最初の行No (スプレッドシート全体で見た時のNo)
//Logger.log( range.getLastRow())// 範囲の最後の行No (スプレッドシート全体で見た時のNo)
//Logger.log( range.getNumRows())// 範囲の行数
//Logger.log(values.length);//値の行数

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

Google Apps Script

Posted by sei