【GAS】同じ値のセルを自動で結合させたい (横方向/水平)コピペでOK
【Googleスプレッドシート】連続するセル同士を自動で結合させるスクリプトGAS(Google Apps Script)を書いてみました。(横方向/水平)に連続する同じ値のセルを自動で結合させます。
空白と既に結合済みのセルは無視します。
(縦方向/垂直)は別記事で書いています。
【GAS】同じ値のセルを自動で結合させたい (縦方向/垂直)コピペでOK
使い方
スプレッドシートの「拡張機能」から「Apps Script」を選択します。
開いた先の画面で、function から始まるコードを全て消します。
このページの一番下のコード「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{} } } }
ディスカッション
コメント一覧
まだ、コメントがありません