0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

なぜ標準機能にない?スプレッドシートのテキスト内URLを一括でハイパーリンクに変えるGAS

0
Last updated at Posted at 2026-08-18

Gemini_Generated_Image_smtjaasmtjaasmtj.jfif

Google Spreadsheetでセル内のテキストに含まれるURLを自動でハイパーリンク化するGASの解説

Google スプレッドシートを運用していると、セルの中にテキストと一緒にドメインやURL(https://...)がベタ書きされていて、「クリックしてもリンクとして開けない」「一つひとつ手動でハイパーリンクを設定するのが大変」という状況に直面したことはありませんか?

本記事では、指定した範囲内のセルをスキャンし、URLが含まれている場合に RichTextValue を使って該当のURL部分だけを自動でハイパーリンク化する Google Apps Script(GAS) のコード解説を行います。


どのようなシチュエーションで役に立つか?

このスクリプトは、特に以下のような業務・プロジェクト管理の場面で真価を発揮します。

1. 外部システムやアンケートからの自動転記データの整理

  • 問い合わせ・アンケートフォーム: フォームの自由記述欄(「参考URLがあれば記載してください」など)に入力されたURLは、スプレッドシート上ではただの文字列として保存されます。
  • Slack / Teams やスクレイピング結果の自動転記: API経由でスプレッドシートに入力された長文テキストに含まれるURLを、まとめてクリック可能な状態に変換できます。

2. 参考資料やドキュメント管理表の整備

  • 1つのセル内に「概要説明文 + URL」が混在している場合、関数(HYPERLINK関数)を使うとセル全体が1つのリンクになってしまうか、数式が複雑になりがちです。
  • このGASを使えば、テキスト内のURL文字列部分だけをピンポイントでハイパーリンクにすることができます。

3. URL末尾の不要な記号によるリンク切れ(404エラー)防止

  • 日本語の文章中にURLを記述すると、「https://example.com/。」や「(https://example.com/)」のように、末尾に句読点や閉じ括弧がくっついてしまうことがよくあります。
  • 本スクリプトには**「URL末尾の不要な記号を取り除くロジック」**が含まれているため、リンク切れを防いだ正確なハイパーリンクを生成できます。

記述されたコードの全体像

今回解説するコードは、役割ごとに3つの関数に分割されています。

  1. hsHyperlinkUrlsInRange_(range): 指定された範囲(Range)をループ処理し、URLが含まれるセルにRichTextを適用する(メイン関数)
  2. hsBuildRichTextIfUrlFound_(text): セル内の文字列からURLを検索し、RichTextValue オブジェクトを組み立てる
  3. hsTrimTrailingPunctuation_(url): URLの末尾にくっついた不要な句読点や括弧を除去する(ユーティリティ関数)

Note: 関数名の末尾にあるアンダースコア _ は、GASにおいて「プライベート関数(マクロ一覧や外部からの直接実行を隠蔽する仕様)」を意味します。


詳細なコード解説

1. メイン処理:指定範囲のセルを走査する (hsHyperlinkUrlsInRange_)

/**
 * range内の各セルを調べ、URLを含む場合はRichTextValueでリンクを設定する。
 * 戻り値は処理したセル数。
 */
function hsHyperlinkUrlsInRange_(range) {
  const values = range.getValues();
  let count = 0;

  for (let r = 0; r < values.length; r++) {
    for (let c = 0; c < values[r].length; c++) {
      const text = values[r][c];
      if (typeof text !== 'string' || text.indexOf('http') === -1) continue;

      const richText = hsBuildRichTextIfUrlFound_(text);
      if (!richText) continue;

      range.getCell(r + 1, c + 1).setRichTextValue(richText);
      count++;
    }
  }

  return count;
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?