GASでスプレッドシートのセル内改行を一括削除|マクロも活用した効率化

前回の記事では、Googleスプレッドシートの「検索と置換」機能を使ってセル内の改行を削除する方法をご紹介しました。
ですが、次のようなケースでは、毎回手作業で置換するのが大変です。
- 改行削除をひんぱんに行う必要がある
- 複数のシートで改行を削除
特に、空白行だけを削除したい場合は毎回(?<=\n)\s*\n|^\s*\n|\s*\n$
を検索ボックスに入力する必要があり、手間がかかります。
そこで今回は、Google Apps Script (GAS)を使ってより効率的にセル内の改行を削除する方法をご紹介します。
GASと併せて、マクロインポートを利用して「拡張機能」→「マクロ」からカンタンに実行できるようにすることで、繰り返し操作もラクにできます。

完成イメージ

- メニューの「マクロ」からGAS実行により、繰り返し操作がカンタン
- 選択した範囲のみ改行削除 or 空白行削除が可能
「検索と置換」から検索パターンを毎回入力する必要がなくなり、カンタンに改行削除が可能となります。
GASの実行手順
今回は以下の2つのスクリプトを作成します。
- 「セル内の改行をすべて削除するスクリプト」
- 「空白行のみ削除するスクリプト」

セル内の改行削除をしたい範囲を選択します。
(B列のみ、B2:B10、シート全体など)

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

function myFunction(){
}
が最初から入っているため、消去して以下のスクリプトを貼り付けます。
スクリプトが2つあるため、2つの.gsファイルに分けて作成します。
スクリプト①:セル内の改行をすべて削除
function removeLineBreaksInSelection() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getActiveRange(); // 選択範囲のみ取得
var values = range.getValues();
for (var i = 0; i < values.length; i++) {
for (var j = 0; j < values[i].length; j++) {
if (typeof values[i][j] === "string") {
values[i][j] = values[i][j].replace(/\n/g, " "); // 改行をスペースに置換
}
}
}
range.setValues(values);
}
スクリプト①の説明
- 現在開いているシートを取得
-
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
SpreadsheetApp.getActiveSpreadsheet()
:現在開いているスプレッドシートを取得します。.getActiveSheet()
:アクティブなシートを取得(ユーザーが現在開いているシート)
- 選択範囲を取得
-
var range = sheet.getActiveRange();
.getActiveRange()
:現在ユーザーが選択しているセルの範囲を取得
- B列のみを選択 → B列のデータが処理対象
- B2:B10 を選択 → B2:B10 のデータが処理対象
- シート全体を選択 → シート全体が処理対象
- 選択範囲のデータを取得
-
var values = range.getValues();
.getValues()
:選択した範囲のセルのデータを 2次元配列(values[][]
) として取得します。
例:
[
["デザインがシンプル\n使いやすい"],
["コスパが良い"]
]- \n はセル内の改行を表します
- セルごとに処理(改行をスペースに置換)
-
for (var i = 0; i < values.length; i++) { for (var j = 0; j < values[i].length; j++) { if (typeof values[i][j] === "string") { values[i][j] = values[i][j].replace(/\n/g, " "); // 改行をスペースに置換 } } }
for
ループでセルを1つずつ処理values[i][j]
で各セルの値にアクセスします。typeof values[i][j] === "string"
で文字列かどうかをチェックします。
(数値などのデータを誤って変更しないように)
.replace(/\n/g, " ")
で改行(\n
)をスペース(/\n/g
は正規表現 で、セル内のすべての改行を対象 にします。- 「改行を削除」ではなく、「スペースに置き換える」 ことで、単語がつながってしまうのを防ぎます。
- 変更後のデータをスプレッドシートに反映
-
range.setValues(values);
.setValues(values)
:処理後のデータを選択範囲に上書き保存します。- これで、セル内の改行がすべて削除され、スペースに置き換えられます。
スクリプト②:空白行のみ削除(改行は維持)
function removeBlankLinesInSelection() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getActiveRange(); // 選択範囲のみ取得
var values = range.getValues();
for (var i = 0; i < values.length; i++) {
for (var j = 0; j < values[i].length; j++) {
if (typeof values[i][j] === "string") {
// 2回以上連続する改行を1つの改行に置き換える
values[i][j] = values[i][j].replace(/\n{2,}/g, "\n").trim();
}
}
}
range.setValues(values);
}
スクリプト②の説明
- 現在開いているシートを取得
-
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
SpreadsheetApp.getActiveSpreadsheet()
:現在開いているスプレッドシートを取得します。.getActiveSheet()
:アクティブなシートを取得(ユーザーが現在開いているシート)
- 選択範囲を取得
-
var range = sheet.getActiveRange();
.getActiveRange()
:現在ユーザーが選択しているセルの範囲を取得- 例
- B列のみを選択 → B列のデータが処理対象
- B2:B10 を選択 → B2:B10 のデータが処理対象
- シート全体を選択 → シート全体が処理対象
- 選択範囲のデータを取得
-
var values = range.getValues();
.getValues()
:選択した範囲のセルのデータを 2次元配列(values[][]
) として取得します。
例:
[
["デザインがシンプル\n\n使いやすい"],
["\n\nコスパが良い"]
]
\n はセル内の改行を表します。 - セルごとに処理(空白行のみを削除し、改行は維持)
-
for (var i = 0; i < values.length; i++) { for (var j = 0; j < values[i].length; j++) { if (typeof values[i][j] === "string") { // 2回以上連続する改行を1つの改行に置き換える values[i][j] = values[i][j].replace(/\n{2,}/g, "\n").trim(); } } }
for
ループでセルを1つずつ処理values[i][j]
で各セルの値にアクセスします。typeof values[i][j] === "string"
で文字列かどうかをチェックします。
(数値などのデータを誤って変更しないように)
.replace(/\n{2,}/g, "\n")
で2つ以上連続する改行(空白行)を1つの改行に置換します。/\n{2,}/g
は正規表現 で、「2回以上連続する改行」を検索します。- 1つの改行(
\n
)にまとめます。
例
テキスト1
(空白行)
テキスト2→
テキスト1
テキスト2.trim()
を適用して、先頭や末尾の不要な改行を削除します。
- 変更後のデータをスプレッドシートに反映
-
range.setValues(values);
.setValues(values)
:処理後のデータを選択範囲に上書き保存します。- これで、セル内の空白行が削除され、改行が整えられます。

スクリプトを書いたら、好きな名前を付けて保存します。
(例:スクリプト①「セル内_改行削除」
スクリプト②「セル内_空白行削除」)

スクリプトを実行すると、選択した範囲におけるセル内の改行削除 or 空白行削除がされます。

選択した範囲のセル内で、改行削除 or 空白行が削除されたことを確認します。
「マクロインポート」でカンタンに実行できるように設定

マクロインポートをすることで、メニューの「マクロ」からGASを実行できるようになります。

メニューから「拡張機能」>「マクロ」>「マクロをインポート」を選択します。

リストから先ほど作成したGASを、「関数を追加」してインポートします。
- セル内_改行削除:
removeBlankLinesInSelection
- セル内_空白行削除:
removeLineBreaksInSelection

インポートするとマクロが追加されますが、関数名のままでは分かりづらい状態です。
そのため、「拡張機能」>「マクロ」>「マクロを管理」から追加されたマクロの名前を選択します。

追加したマクロの名前をクリックして、わかりやすい名前に変更します。
removeBlankLinesInSelection
→ セル内_改行削除removeLineBreaksInSelection
→ セル内_空白行削除
(追加したマクロをショートカットキーとして割り当ても可)

マクロの名前が変更されたことを確認します。
これで「拡張機能」ー「マクロ」から簡単にGASを実行できるようになります。
複数のシートでGASを実行するなど、繰り返し改行削除を行う時に便利です。
まとめ
GASを使うことで、セル内の改行削除・空白行削除を効率化できます。
選択した範囲(A列のみ、B2:B10など)だけを処理可能なため、柔軟な対応が可能です。
複数のシートにわたってセル内の改行削除を行うなど、繰り返し実行する場合にGASをご活用ください。

弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。
GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。
また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
貴方の業務改善を全力でサポートいたします。
コメント