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

前回の記事では、SPLIT関数を使って改行ごとに 横方向(列方向) にデータを分割する方法をご紹介しました。

ですが、縦方向(行方向)に分割するには、TRANSPOSE関数を組み合わせる必要があり、データごとに数式を手動で入力する手間がかかります。

そこで今回は、Google Apps Script(GAS)を使って、セル内の改行ごとにデータを自動で縦方向に分割する方法 をご紹介します!

目次

完成イメージ

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

手順

STEP
セル分割したい範囲を選択

改行ごとにセルを分割したいデータの範囲を選択します。

例えば、A列に「商品名」、B列に「詳細(改行あり)」が入っている場合は、A列とB列の両方を選択します。

B列のデータだけを選択すると、どの商品に対応する情報なのかわからなくなるため、A列と一緒に選択する必要があります。

STEP
GASエディタを開く

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

STEP
スクリプトの作成

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セルからデータを埋めます。
STEP
スクリプトを保存

スクリプトを書いたら、好きな名前を付けて保存します。

(例:「セル_改行分割」)

STEP
スクリプトを実行

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

STEP
改行ごとにセルが分割されたことを確認

改行ごとにセルが分割されたことを確認します。

書式設定はコピーされないため、必要に応じて元のデータと合わせます。

新しいシートに作成されるため、元のデータは残したままにできます。

まとめ

Google Apps Script (GAS)を使えば、セル内の改行ごとにデータ分割もカンタンにできます。(縦方向)

選択範囲のデータを自動的に処理できるので、データ整理がスムーズです。

手作業で数式を入力する手間を省けるため、大量のデータを整理したい時にご活用ください。

弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。

GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。

また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。

貴方の業務改善を全力でサポートいたします。

お問い合わせはこちら

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次