【GAS初心者向け】スプレッドシートで<br>タグを実際の改行に変換する方法

GAS(Google Apps Script)

1. はじめに

Google スプレッドシートでデータを扱っていると、HTML形式で保存されたテキストデータを見かけることがありませんか?特に、改行を表す <br> タグが含まれたデータは、そのままでは見づらく、実際の改行として表示したいと思うことが多いでしょう。

この記事では、Google Apps Script(GAS)を使って、スプレッドシートのセル内にある <br> タグを実際の改行に変換する方法を初心者向けに解説します。

2. この記事で解決できること

2.1 対象となる問題

  • セル内の <br> タグが文字として表示されてしまう
  • HTMLから取得したデータを読みやすくしたい
  • 一括で複数のセルを処理したい

2.2 解決後の状態

変換前:

こんにちは<br>お疲れさまです<br>よろしくお願いします

変換後:

こんにちは
お疲れさまです
よろしくお願いします

3. 前提知識

3.1 必要なスキル

  • Google スプレッドシートの基本操作
  • Google Apps Script の基本的な使い方(エディタの開き方程度)

3.2 対応する<br>タグの種類

タグの種類説明変換対象
<br>基本的なbrタグ
<br/>自己終了タグ
<br />スペース付き自己終了タグ
<BR>大文字のbrタグ

4. 実装方法

4.1 Google Apps Script エディタを開く

  1. Google スプレッドシートを開く
  2. 「拡張機能」→「Apps Script」をクリック
  3. 新しいタブでGASエディタが開く

4.2 基本的なコード

以下のコードをエディタに貼り付けてください:

/**
 * C列の<br>タグを実際の改行に変換する関数
 */
function convertBrToNewlineInColumnC() {
  // アクティブなスプレッドシートとシートを取得
  const sheet = SpreadsheetApp.getActiveSheet();
  
  // C列のデータ範囲を取得
  const lastRow = sheet.getLastRow();
  if (lastRow < 1) {
    Logger.log('データがありません');
    return;
  }
  
  // C列の範囲を取得(C1からC[最後の行]まで)
  const range = sheet.getRange(1, 3, lastRow, 1);
  const values = range.getValues();
  
  // 各セルの値を処理
  for (let i = 0; i < values.length; i++) {
    let cellValue = values[i][0];
    
    // セルが空でない場合のみ処理
    if (cellValue && typeof cellValue === 'string') {
      // <br>タグを改行文字に変換
      cellValue = cellValue.replace(/<br\s*\/?>/gi, '\n');
      values[i][0] = cellValue;
    }
  }
  
  // 変換した値をシートに書き戻し
  range.setValues(values);
  
  Logger.log(`C列の${lastRow}行のデータを処理しました`);
}

4.3 コードの詳細解説

4.3.1 重要な部分の説明

1. シートの取得

const sheet = SpreadsheetApp.getActiveSheet();

現在開いているシートを取得します。

2. データ範囲の特定

const lastRow = sheet.getLastRow();
const range = sheet.getRange(1, 3, lastRow, 1);
  • getLastRow(): データがある最後の行を取得
  • getRange(1, 3, lastRow, 1): C列(列番号3)の1行目から最後の行までを指定

3. 正規表現による置換

cellValue = cellValue.replace(/<br\s*\/?>/gi, '\n');

この正規表現の意味:

  • <br: 「<br」で始まる
  • \s*: 0個以上の空白文字
  • \/?: 「/」が0個または1個
  • >: 「>」で終わる
  • g: 全てのマッチを対象
  • i: 大文字小文字を区別しない

5. 応用バージョン

5.1 特定の範囲だけを処理する関数

/**
 * 指定した行範囲のC列のみを処理する関数
 */
function convertBrToNewlineInColumnCRange(startRow, endRow) {
  const sheet = SpreadsheetApp.getActiveSheet();
  
  // 範囲の妥当性チェック
  if (startRow < 1 || endRow < startRow) {
    Logger.log('無効な行範囲です');
    return;
  }
  
  // 指定された範囲のC列を取得
  const range = sheet.getRange(startRow, 3, endRow - startRow + 1, 1);
  const values = range.getValues();
  
  // 処理内容は基本版と同じ
  for (let i = 0; i < values.length; i++) {
    let cellValue = values[i][0];
    
    if (cellValue && typeof cellValue === 'string') {
      cellValue = cellValue.replace(/<br\s*\/?>/gi, '\n');
      values[i][0] = cellValue;
    }
  }
  
  range.setValues(values);
  Logger.log(`C列の${startRow}行から${endRow}行までのデータを処理しました`);
}

5.2 選択範囲のみを処理する関数

/**
 * 現在選択中のC列セルのみを処理する関数
 */
function convertBrToNewlineInSelectedCells() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getActiveRange();
  
  // 選択範囲がC列を含んでいるかチェック
  const startCol = range.getColumn();
  const endCol = startCol + range.getNumColumns() - 1;
  
  if (startCol > 3 || endCol < 3) {
    SpreadsheetApp.getUi().alert('C列を含む範囲を選択してください');
    return;
  }
  
  // C列のみの範囲を取得
  const cColumnRange = sheet.getRange(range.getRow(), 3, range.getNumRows(), 1);
  const values = cColumnRange.getValues();
  
  // 処理内容は同じ
  for (let i = 0; i < values.length; i++) {
    let cellValue = values[i][0];
    
    if (cellValue && typeof cellValue === 'string') {
      cellValue = cellValue.replace(/<br\s*\/?>/gi, '\n');
      values[i][0] = cellValue;
    }
  }
  
  cColumnRange.setValues(values);
  Logger.log('選択範囲のC列データを処理しました');
}

6. 使い方

6.1 関数の実行方法

関数名使用場面実行方法
convertBrToNewlineInColumnC()C列全体を処理関数名を選択して実行ボタン
convertBrToNewlineInColumnCRange(2, 10)2-10行目のC列のみ処理カッコ内に開始行と終了行を指定
convertBrToNewlineInSelectedCells()選択範囲のC列のみ処理事前にスプレッドシートで範囲選択

6.2 実行手順

  1. コードの保存
    • GASエディタで Ctrl + S で保存
    • プロジェクト名を適当に設定(例:「brタグ変換」)
  2. 権限の許可
    • 初回実行時に権限確認画面が表示される
    • 「許可を確認」→「詳細」→「安全ではないページに移動」→「許可」
  3. 関数の実行
    • 実行したい関数を選択
    • 「実行」ボタンをクリック

7. 注意点とトラブルシューティング

7.1 よくある問題と解決方法

問題1: 権限エラーが出る

  • 原因: スプレッドシートへのアクセス権限がない
  • 解決方法: 前述の権限許可手順を実行

問題2: うまく改行されない

  • 原因: セルの表示設定が「テキストの折り返し」になっていない
  • 解決方法: 対象セルを選択→「表示形式」→「テキストの折り返し」→「折り返し」

問題3: 一部のbrタグが変換されない

  • 原因: 想定外のbrタグの記述方法
  • 解決方法: 実際のデータを確認し、必要に応じて正規表現を調整

7.2 性能に関する注意点

  • 大量データの処理: 数千行を超える場合は、バッチ処理を検討
  • 実行時間制限: GASには6分の実行時間制限があるため、大量データは分割処理

8. カスタマイズ方法

8.1 他の列に対応させる

C列以外(例:B列)に適用したい場合:

// 列番号を変更(B列なら2、D列なら4)
const range = sheet.getRange(1, 2, lastRow, 1); // B列の場合

8.2 他のHTMLタグにも対応

<p> タグなども改行に変換したい場合:

// 複数のタグに対応
cellValue = cellValue.replace(/<br\s*\/?>/gi, '\n');
cellValue = cellValue.replace(/<\/p>/gi, '\n');
cellValue = cellValue.replace(/<p>/gi, '');

9. まとめ

この記事では、GASを使ってスプレッドシートの <br> タグを実際の改行に変換する方法を解説しました。

この方法のメリット:

  • 一括で大量のデータを処理できる
  • 様々な形式のbrタグに対応
  • 処理範囲を柔軟に指定可能
  • 繰り返し使用可能

活用シーン:

  • Webサイトからエクスポートしたデータの整理
  • HTMLメールの内容をスプレッドシートで管理
  • APIから取得したHTML形式データの前処理

HTMLタグが混在したデータを扱う機会は今後も増えると思います。この記事で紹介した方法をベースに、さらに高度な処理にも挑戦してみてください。

タイトルとURLをコピーしました