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 エディタを開く
- Google スプレッドシートを開く
- 「拡張機能」→「Apps Script」をクリック
- 新しいタブで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 実行手順
- コードの保存
- GASエディタで
Ctrl + S
で保存 - プロジェクト名を適当に設定(例:「brタグ変換」)
- GASエディタで
- 権限の許可
- 初回実行時に権限確認画面が表示される
- 「許可を確認」→「詳細」→「安全ではないページに移動」→「許可」
- 関数の実行
- 実行したい関数を選択
- 「実行」ボタンをクリック
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タグが混在したデータを扱う機会は今後も増えると思います。この記事で紹介した方法をベースに、さらに高度な処理にも挑戦してみてください。