質問: ### 前提・実現したいこと googleスプレッドシートにてHYPERLINK関数ではなく直接文字列にリンクが付与されているケースで、設定されているハイパーリンクの内容を取得したい。 (例)A列各行にリンク付き文字列が入力されているとき、B列各行にリンク先URLを入力したい。 ### 発生している問題・エラーメッセージ 青文字下線付きのテキストをクリックすると上にリンクURLが表示される。 それをクリックするとリンク先に遷移できる。 しかし、セルの情報を見ても文字列情報しか書かれていない。 (=HYPERLINK()という内容になっていない) ### 試したこと ググったが解決方法が判明していない。 ### 追記 この現象はエクセルで作成したものをスプレッドシートにアップロードした際に生じることがわかりました。 エクセル上では以下の方法でHYPERLINKを取得出来ましたがgoogleスプレッドシート上でHYPERLINKを取得する方法は未だ不明です。 「[Excel] VBAでハイパーリンクを取得する関数を作る」(https://qiita.com/nomico/items/b93ca6b3c0644583e7cb)
回答: > > この現象はエクセルで作成したものをスプレッドシートにアップロードした際に生じることがわかりました。 > > エクセル上では以下の方法でHYPERLINKを取得出来ましたがgoogleスプレッドシート上でHYPERLINKを取得する方法は未だ不明です。 > > > GASを使って一覧表からハイパーリンクURLを一瞬で抽出する に書いてありますが、セルのデータがリッチテキストになっており、ハイパーリンクはリッチテキスト中のデータとして格納されています。 `getRichTextValues`で得た2次元配列の要素に対して、`getLinkUrl`することでURLを取り出せます。 ``` function myFunction() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getActiveSheet(); var data = sheet.getRange(2, 1, sheet.getLastRow() - 1, 1).getRichTextValues(); var arr = data.reduce(function(a, i) { a.push([i[0].getLinkUrl()]); return a; }, []); var range = sheet.getRange(2, 2, arr.length, 1); range.setValues(arr); } ``` P.S. 別回答が、上記URLのサンプルコードとコメントまで一致しているんですが、作者の方なんですかね。