2022/01/08に更新

【GASで時短】結合されたセルを検索&解除する

スプレッドシート小技

選択範囲に存在する結合されたセルを検索し、解除することもできるGoogle Apps Scriptです。予想外の結合によって困ったことがある方は多いと思います。このアプリが転ばぬ先の杖になれば幸いです。結合を解除するかどうかはダイアログで選択できます。

こんな悩みを解決します


  • セルの結合をしてほしくないシートで、本当に結合セルがないかチェックしたい。
  • 結合セルがあればまとめて解除したい。

用意するもの


特にありません。今お使いのスプレッドシートに組み込めます。

このスクリプトで出来ること


  • シートの選択範囲内にある「結合されたセル」を探して、セル番地を教えてくれます。
  • もし必要であればセルの結合を解除することもできます。

使い方


1.検索したい範囲の選択

このスクリプトは選択中のセル範囲を対象にして動作するので、スクリプト実行前に結合セルを探したい範囲を選択してください。
この例では一部だけ選択していますが、シート内全てを選択しても構いません。

2.スクリプトの実行

範囲を選択したら、メニューから「結合されたセルを検索」を実行してください。

3.発見された結合セルの確認と、解除の判断

選択範囲に結合セルが存在すると、そのセル番地が表示されます。
もし結合を解除したい場合は「OK」を押してください。
解除しなくてよい場合は「キャンセル」を押してください。スクリプトが終了します。

4.結果の確認

ダイアログで「OK」を押すと、引き続き結合の解除処理が実行されます。
解除されたことを確認してください。

5.結合セルがない場合

選択範囲に結合されたセルが見つからなかった場合は「結合されたセルは見つかりませんでした」というメッセージが表示され、スクリプトが終了します。

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00033/index.html
 */

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('選択範囲内の結合されたセルを検索する', 'find_merged_cell');

  // メニューを画面に追加する
  menu.addToUi();
}


function find_merged_cell() {

  // アラートを表示するためにUIを取得
  const ui = SpreadsheetApp.getUi();

  // アクティブなスプレッドシート、シートを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // 選択範囲を取得
  let range = sheet.getActiveRange();

  // 範囲内に結合セルがあるかどうかを調べて、なければスクリプト終了
  if (!range.isPartOfMerge()) {
    ui.alert('結合されたセルは見つかりませんでした');
    return;
  }

  // 以下、結合セルがあった場合の処理

  // 結合されているセル範囲を取得
  const merged_ranges = range.getMergedRanges();

  // 結合されているセル番地を格納する配列を用意
  let merged_address = [];

  // 結合されているセルの数だけ、セル番地を取得
  for (let i = 0; i < merged_ranges.length; i++) {
    merged_address.push(merged_ranges[i].getA1Notation());
  }

  // 結合を解除するかどうかユーザーに確認する
  const user_response = ui.alert('結合されたセルが見つかりました\n' + merged_address.join('\n') + '\n\n結合を解除しますか?', ui.ButtonSet.OK_CANCEL);

  // キャンセルが押されたら結合解除はせずに、スクリプトを終了する
  if (user_response == ui.Button.CANCEL) {
    return;
  }

  // 結合セルをループで解除する
  for (let i = 0; i < merged_address.length; i++) {

    range = sheet.getRange(merged_address[i]); // A1形式でRangeを取得
    range.breakApart(); // 結合を解除する

  }

}

関連するアプリ


【GASで便利に】2つのセルの値を入れ替える

選択した2つのセル(範囲)の値を、入れ替えるGoogle Apps Scriptです。行や列の入れ替えもできます。

【GASで便利に】セルの順番を逆にする(行)

選択した行範囲の順番を逆にするGoogle Apps Scriptです。ソートではなく、単純に順番を逆にします。関数の組み合わせでも実現できますが、GASを登録してしまったほうが早いかもしれません。

【GASで便利に】セルの順番を逆にする(列)

選択した列範囲の順番を逆にするGoogle Apps Scriptです。行バージョンを作ったので、列バージョンも。ニーズはあるのでしょうか。

【GASで便利に】セルの順番を逆にする(行と列)

選択した行および列範囲の順番を逆にするGoogle Apps Scriptです。これは本当に使い所があるのかわかりませんが、作ってみたので公開します。

【GASで便利に】指定した文字数でセルに分割する(行方向)

1つのセルに入力されている文字列を、指定した文字数で分割するGoogle Apps Scriptです。区切りに使用する文字が無くても大丈夫です。行方向に分割します。

【GASで便利に】指定した文字数でセルに分割する(列方向)

1つのセルに入力されている文字列を、指定した文字数で分割するGoogle Apps Scriptです。区切りに使用する文字が無くても大丈夫です。列方向に分割します。

【GASで便利に】キーワードを含むセル番地を一覧表示する

検索キーワードを全シートから探して、ヒットしたセル番地をまとめて表示するGoogle Apps Scriptです。標準の検索機能ではヒットしたセルが1個ずつ分かりますが、まとめて知りたくなったので作成しました。

【GASで時短】選択範囲に存在する「改行」を検索&削除する

選択範囲に改行が含まれているセルを検索し、削除することもできるGoogle Apps Scriptです。想定外の改行によって困ることが稀によくありますので作ってみました。改行を削除するかどうかはダイアログで選択できます。

【GASで時短】データ・文字が入っていない行を削除する

シート内の「何も書き込まれていない行」を削除してくれるGoogle Apps Scriptです。スプレッドシートをメモ帳代わりにしていると、特に意味のない空白行がたくさんあったりして、消すのが面倒だったので作成してみました。すべての列に何も文字が入っていない行を消し去ります。

【GASで時短】1行ごとに空白行を挿入する

1行ごとに任意の空白行を挿入してくれるGoogle Apps Scriptです。データを整理中に「今ある行の間に1行ずつ足したい・・・」ということが稀によくあるので作成しました。追加する行数はプロンプトで指定が可能です。

【GASで便利に】シート内の全てのリンクを抽出する

シート内に存在するハイパーリンク(URL)を取り出すGoogle Apps Scriptです。リンクを全て抜き出したくなったので作成してみました。

タグ一覧

最新のアプリ

人気のアプリ

myfunc.jp