- 締切済み
Googleスプレッドシートでリンクを取り出す
Googleスプレッドシートで、例えばA1セルに =HYPERLINK("http://www.yahoo.co.jp","ヤフー") と入力してあります。 A2にURLだけ取り出すことはできるでしょうか? 平凡に「http://www.yahoo.co.jp」 とURLだけ表示されるようにしたいのです。 数百業もデータを作ってしまった後に「URLだけ欲しい」と思ってしまったので、手動で取り出すのが大変で、アドバイスを頂けますと幸いです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
#1です。#1ではVBAが中心の回答になり、けなされてしまったが、続いて考えてみました。 こちらもエクセルでの回答すが、こちらは関数でやって見ました。 エクセルでは関数だけで、できそうだということです。 「Googleスプレッドシート」では、「FORMUTEXT関数」が今のところ無いようなのですが、(よければ質問者の方で存在するか調べてください)残念です。 エクセルの回答なので、質問者にはこれでは回答として不満でしょう。 今後に、質問者以外の、他の人にも目に留まることも考えて、上げてみます。(私は、ほぼいつも質問者以外の方も、後日読んでくれることを意識して回答してます。) 検索が充実したおかげで、今では(2015年)WEBでの過去質問の疑問点の解説によく出くわします。この質問と同じ質問をするひと(ただしエクセルで)がいて、WEB照会したその際に、その人のお役に立てばと思う。 ーーー B列は関数を入れた結果の見た目です。 例 B列 C列 ヤフー =HYPERLINK("http://www.yahoo.co.jp","ヤフー") http://www.yahoo.co.jp グーグル =HYPERLINK("http://www.google.co.jp","グーグル") http://www.google.co.jp 大塚 =HYPERLINK("https://faq.qqweb.jp/faq/viewer.asp?ID=AC9A687811","大塚") https://faq.qqweb.jp/faq/viewer.asp?ID=AC9A687811 ヨドバシ =HYPERLINK("http://www.yodobashi.com/","ヨドバシ") http://www.yodobashi.com/ <B列の式> B2に (ハイパーリンクの設定) =HYPERLINK("http://www.yahoo.co.jp","ヤフー") <C列の上の方の式> C2に (ハイパーリンク設定式を別セルに文字列表示化) =FORMULATEXT(B2) <C列の下の方の式> C4に (文字列からアドレス部分を抜出し) =MID(C2,13,FIND(",",C2)-14) ーーー グーグル以下の例の式の解説は、同様なので省略。
- imogasi
- ベストアンサー率27% (4737/17069)
(1)質問者は、「Googleスプレッドシート」での解法を望んでいるのは、わかりますが (2)参考までにエクセルでは、過去に同じような質問があるが、 (A)ワークシート関数(普通にエクセル関数といっている関数)での解法は存在しないようだ、 (B)VBAなら、WEBに下記のような回答があり、 Function GetLinkAdr(Rng As Range) As String Dim StrAdr As String Application.Volatile With Rng.Cells(1) If .HasFormula Then If InStr(.Formula, "=HYPERLINK") = 1 Then _ StrAdr = Split(.Formula, Chr(34))(1) Else If .Hyperlinks.Count > 0 Then _ StrAdr = .Hyperlinks(1).Address End If End With GetLinkAdr = StrAdr End Function 上記VBA関数(Function) Sub test02() Range("c2") = GetLinkAdr(Range("b2")) Range("c7") = GetLinkAdr(Range("b7")) End Sub でできることを確認した。 ーー ただし (x)HYPERLINK関数での設定したセルと (Y)VBAで設定したしたセルと、捉え方に差があるようでややこしい(十分自信なし) それが If .HasFormula Then ・・ Else ・・・ EndIf と聞いて2つの部分(Else以下とその上の部分)に分けている理由のようだ。 (X)のコードは、1セルの例で Sub test01() Range("B3").Hyperlinks.Add Anchor:=Cells(3, 2), Address:="http://www.yahoo.co.jp" End Sub (Y)で設定すると Public Sub GetURL() Dim h As Hyperlink MsgBox ActiveSheet.Hyperlinks.Count For Each h In ActiveSheet.Hyperlinks MsgBox h.Address h.Range.Offset(0, 1) = h.Address Next End Sub では引っかかる(取り出せる)。しかし(X)で設定したものは捉えられないようだ。 ーーー 質問者はエクセルVBAは経験ないだろうが、Googleスプレッドシートのマクロ(Google Apps Scriptプログラミング)も経験ないだろうから、なお勉強しにくい。 この後の回答か、自分でWEBなりを調べて関数での回答を期待して、ください。 (望み薄と思うが) エクセルとの互換性やエクセルが表計算ソフトで先行開発している(特にVBA・マクロ)ので、まずGoogleスプレッドシートにも関数がないのではないか。またマクロの記事でも調べにくいのでは。 もしクセルにデータを移して、VBAでやるのであれば、 ある列の、連続した「数百行ものデータ」をもとに、隣列にでも、アドレスの文字列を出すことはできる。ただし上記の 2.(B)のプログラムを多少修正する必要がある。
お礼
bkk
お礼
bn9