GASでスプレッドシートのセル内改行を基準にデータを分割する方法

前回の記事では、SPLIT関数を使って改行ごとに 横方向(列方向) にデータを分割する方法をご紹介しました。
ですが、縦方向(行方向)に分割するには、TRANSPOSE関数を組み合わせる必要があり、データごとに数式を手動で入力する手間がかかります。
そこで今回は、Google Apps Script(GAS)を使って、セル内の改行ごとにデータを自動で縦方向に分割する方法 をご紹介します!

完成イメージ


- 選択範囲のセル内の改行を基準に、縦方向にデータを分割できる
- 分割後のデータを新しいシートに出力(元データは変更しない)
- 実行のたびに新しいシート「分割結果」をリセットして、最新のデータのみ保持
手順

改行ごとにセルを分割したいデータの範囲を選択します。
例えば、A列に「商品名」、B列に「詳細(改行あり)」が入っている場合は、A列とB列の両方を選択します。
B列のデータだけを選択すると、どの商品に対応する情報なのかわからなくなるため、A列と一緒に選択する必要があります。

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

function myFunction(){
}
が最初から入っているため、消去して以下のスクリプトを貼り付けます。
function splitCellsByNewlineToNewSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet(); // 現在アクティブなシート
var range = sheet.getActiveRange(); // 選択範囲を取得
var values = range.getValues();
var newSheetName = "分割結果";
// 既存のシートがある場合は削除
var existingSheet = ss.getSheetByName(newSheetName);
if (existingSheet) {
ss.deleteSheet(existingSheet);
}
// 新しいシートを作成
var newSheet = ss.insertSheet(newSheetName);
var output = [];
for (var i = 0; i < values.length; i++) {
var productName = values[i][0]; // A列の項目名を取得
var details = values[i][1]; // B列の詳細情報を取得
if (typeof details === "string") {
var splitDetails = details.split("\n"); // 改行で分割
for (var j = 0; j < splitDetails.length; j++) {
output.push([productName, splitDetails[j]]); // 項目名と分割した詳細をセット
}
}
}
// 分割結果を新しいシートに書き込む(ヘッダーなし)
if (output.length > 0) {
newSheet.getRange(1, 1, output.length, 2).setValues(output);
}
}
スクリプトの説明
- スプレッドシートと選択範囲の取得
-
var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); // 現在アクティブなシート var range = sheet.getActiveRange(); // 選択範囲を取得 var values = range.getValues();
ss.getActiveSpreadsheet()
:スプレッドシート全体を取得します。getActiveSheet()
: 現在選択されているシートを取得します。getActiveRange()
: 選択範囲(セルのデータ)を取得します。getValues()
: 選択範囲のデータを2次元配列として取得します。
- 既存の「分割結果」シートを削除
-
var newSheetName = "分割結果"; var existingSheet = ss.getSheetByName(newSheetName); if (existingSheet) { ss.deleteSheet(existingSheet); }
getSheetByName(newSheetName)
で、すでに「分割結果」シートがあるかを確認存在する場合はdeleteSheet()
で削除します。- これにより、実行のたびに最新の分割データだけが書き込まれます。
- 新しい「分割結果」シートを作成
-
var newSheet = ss.insertSheet(newSheetName);
- 削除後に新しいシート「分割結果」を作成します。
- ここに改行ごとに分割したデータを書き込みます。
- セル内の改行ごとにデータを分割
-
var output = []; for (var i = 0; i < values.length; i++) { var productName = values[i][0]; // A列の項目名を取得 var details = values[i][1]; // B列の詳細情報を取得 if (typeof details === "string") { var splitDetails = details.split("\n"); // 改行で分割 for (var j = 0; j < splitDetails.length; j++) { output.push([productName, splitDetails[j]]); // 項目名と分割した詳細をセット } } }
- A列(項目名)とB列(詳細)を取得します。
- 詳細(B列)に改行がある場合、
split("\n")
で分割します。 - 分割したデータを
[項目名, 詳細]
の形式でoutput
配列に保存します。 - 同じ項目名を保持したまま、詳細のみ縦方向に分割されます。
- 新しいシートにデータを書き込み
-
if (output.length > 0) { newSheet.getRange(1, 1, output.length, 2).setValues(output); }
- 分割したデータがある場合のみ、新しいシートに書き込みます。
getRange(1, 1, output.length, 2)
で、A1セルからデータを埋めます。

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

スクリプトを実行すると、新しいシートに改行ごとに分割した結果を出力します。

改行ごとにセルが分割されたことを確認します。
書式設定はコピーされないため、必要に応じて元のデータと合わせます。

新しいシートに作成されるため、元のデータは残したままにできます。
まとめ
Google Apps Script (GAS)を使えば、セル内の改行ごとにデータ分割もカンタンにできます。(縦方向)
選択範囲のデータを自動的に処理できるので、データ整理がスムーズです。
手作業で数式を入力する手間を省けるため、大量のデータを整理したい時にご活用ください。

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