• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAからのHYPERLINK関数のアドレス取得法)

VBAからのHYPERLINK関数のアドレス取得法

このQ&Aのポイント
  • Excel 2003のVBAからHYPERLINK関数が指し示す配置先(アドレス)を取得する方法についてお伺いします。
  • VBA化が困難な複雑な分岐を含む「配置先」を取得する方法や、別セルに書き出さずに取得する方法を教えてください。
  • また、Excel 2003からだけでなく、Excel 2010でも動作する方法についてもお教えいただけますと幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

かなり強引だけどこんなのを作ってみました。 ・セルA999をWORK用に使っています。 ・対象となるセル式中に「HYPERLINK(」が一回しか出て来ない事が条件です。 Function GetURL(rTarget As Range) As String   Dim sStr1, sStr2, i   Dim sStr3 As String   If rTarget = "" Then Exit Function   sStr1 = Split(Range("A2").Formula, "HYPERLINK(")   sStr2 = Split(sStr1(1), ",")   For i = 0 To (UBound(sStr2) - 1)     sStr3 = sStr3 & sStr2(i) & ","   Next i   sStr3 = Mid(sStr3, 1, Len(sStr3) - 1)   Range("A999").Formula = "=" & sStr3   GetURL = Range("A999").Value   Range("A999").Clear End Function

lack124
質問者

お礼

度々のご回答ありがとうございます。 そのままでは動かなかったので、下記の通り改造すると期待通りの動作をしました。 Function GetURL(rTarget As Range) As String Dim sStr1, sStr2, i Dim sStr3 As String If rTarget = "" Then Exit Function sStr1 = Split(rTarget.Formula, "HYPERLINK(") '←A2をrTargetに変更 sStr2 = Split(sStr1(1), ",") For i = 0 To (UBound(sStr2) - 1) sStr3 = sStr3 & sStr2(i) & "," Next i sStr3 = Mid(sStr3, 1, Len(sStr3) - 1) Sheet1.Range("A999").Formula = "=" & sStr3 '←念のためシートの明確化 GetURL = Sheet1.Range("A999").Value '←念のためシートの明確化 Sheet1.Range("A999").Clear '←念のためシートの明確化 End Function Excel 2010では動作未確認ですが、おそらく期待通りの動作をするだろうと思います。 こちらの結果は補足にてご報告させて頂きます。 アルゴリズムまで考えて頂き、本当にありがとうございました。 個人的にはもっとお手軽な方法があれば良いなと思っていたのですが、 やはり力技で行くしかないんですね(--;

lack124
質問者

補足

Excel 2010でも動作することを確認しました。 ありがとうございました。

その他の回答 (2)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

例えば =IF(G14<>"",HYPERLINK(A1&IF(TEXT(TODAY(),"YY")=(MID(G14,3,2)),"~))","20"&(MID(G14,3,2))&"\")&G14&"Sample.xls", G14&"Sample.xls"),"") こんな数式のような意地悪な事はないと思いますが :) Sub test()   Dim flg As Boolean   Dim f  As String   Dim s  As String   Dim c  As Long   Dim i  As Long   f = Selection.Formula   c = InStr(f, "HYPERLINK(")   If c > 0 Then     f = Mid(f, c + 10)     c = 0     For i = 1 To Len(f)       s = Mid(f, i, 1)       If s = """" Then flg = Not flg       If Not flg Then         Select Case s         Case "("           c = c + 1         Case ")"           c = c - 1         Case ","           If c = 0 Then Exit For         End Select       End If     Next     f = Left(f, i - 1)     Debug.Print f, Evaluate(f)   End If End Sub

lack124
質問者

お礼

ご回答ありがとうございます。 Excel 2003にて、少し改造して動作確認したところ、こちらの内容でも動作することを確認しました。 Evaluate関数で計算式の実行結果が見られるのですね。 こちらもExcel 2010での動作確認結果を補足にて報告させていただきます。

lack124
質問者

補足

こちらについても、Excel 2010でも動作することを確認しました。 ありがとうございました。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

こういう事? 何か私が勘違いしている気がしますが……。 sStr = Split(Range("A1").Formula, ",") MsgBox Right(sStr(0), Len(sStr(0)) - Len("=HYPERLINK("))

lack124
質問者

お礼

ご回答ありがとうございます。 ですが、ご回答いただいた内容では実現できませんでした。 付加条件(1)にある通り、「配置先」には複雑な分岐等があります。 これを詳しく書くと、以下の内容です。 =IF(G14="","",HYPERLINK(A1&IF(TEXT(TODAY(),"YY")=(MID(G14,3,2)),"~","20"&(MID(G14,3,2))&"\")&G14&"Sample.xls", G14&"Sample.xls")) そのため、ご回答頂いたsStrの中身は以下のようになってしまいます。 =IF(G14="" ※正しくは上記のような内容ではありませんが、業務にかかわるので開示はご容赦ください。

関連するQ&A