VBA関数でハイパーリンクのアドレスを取得する方法

このQ&Aのポイント
  • VBA関数を使用してハイパーリンクのアドレスを取得する方法を教えてください。
  • 質問者はハイパーリンクがセルA1にあり、VBAの関数を使ってそのアドレスを取得したいと考えています。
  • 質問者が試した方法では引数が省略できないという結果になりました。同様の操作を関数で行う方法を教えてください。
回答を見る
  • ベストアンサー

VBA関数の使い方がわからないです

A1にはハイパーリンクとしてhttp://www.yahoo.co.jp/ が入っていて、標準モジュールで Sub Macro1() MsgBox HyperlinkAddress End Sub Function HyperlinkAddress(target As Range) As String HyperlinkAddress = target.Hyperlinks(1).Address End Function としたら、引数は省略できません。になるのですが、 どうすればいいですか? Sub Macro1() MsgBox Selection.Hyperlinks(1).Address End Sub これと同じような事を、関数を使って表現したいです。

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

  • ベストアンサー
  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

こうでしょうか? Sub Macro1() MsgBox HyperlinkAddress(Selection) End Sub Function HyperlinkAddress(target As Range) As String HyperlinkAddress = target.Hyperlinks(1).Address End Function Function HyperlinkAddress(target As Range) As String で引数を「target As Range」を必須にしているので、Rangeオブジェクトの引数付で呼び出さなければなりませんので、呼出側は「HyperlinkAddress(Selection)」です。

OHWIMRMJUPMK
質問者

お礼

こういうことです! 関数で「target As Range」を使っている場合は(Selection)にしてあげるのですね。 勉強になりました。ご回答ありがとうございました。

関連するQ&A

  • Excel VBAについて。

    VBAに詳しい方に質問です。 次の2つのプログラムが何をしているのか詳しく教えて下さい。 Sub Macro1() Sheets("Sheet1").Range("A1").QueryTable.Refresh BackgroundQuery:=False End Sub ------------------------- Function LNK(rng As Range) LNK = rng.Hyperlinks(1).Address End Function

  • VBA 関数(Function) カッコの後のデータ型は必要?

    Function あ() あ = "あああ" End Function Sub test3() MsgBox あ End Sub と、 Function あ() As String あ = "あああ" End Function Sub test3() MsgBox あ End Sub は同じ動作をするのですがやはり「As String」をつけたほうがいいのですか? ウォッチウインドウで確認すると 「As String」がないほうは「Variant/ String」型ですが あるほうは「String」型のみです。

  • エクセルVBAで教えてください。

    サイトで既出のコードを若干変えて下のようにして使っています。 下のコードでダイアログを呼び出し、フォルダを指定して、ハイパーリンクでそのフォルダを開くようになっているのですが、ファイルそのものを指定して、ハイパーリンクでファイルを開くようにするにはどうすればいいでしょうか。下のコードの一部を変えれば可能であれば、下のコードを踏襲して教えていただければ有難いです。 よろしくお願いします。 Sub hyperlink() Dim Fol As Object Dim fp As String Set Fol = CreateObject("Shell.Application"). _ BrowseForFolder(0, "フルパスを取得します。ハイパーリンクにしたいフォルダを指定してください。", 0) If Not Fol Is Nothing Then Range("IV1").Value = Fol.Items.Item.Path End If Application.ScreenUpdating = False Range("IV1").Copy Range("A65536").End(xlUp).Offset(1).PasteSpecial xlPasteValues fp = Range("A65536").End(xlUp).Value ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=fp, TextToDisplay:=fp Application.CutCopyMode = False Range("IV1").ClearContents Application.ScreenUpdating = True MsgBox "ハイパーリンクを設定しました。" End Sub

  • エクセルVBAでフォルダの作成-2

    先ほどダブルクリックすると、クリックしたその名前にしたフォルダを作成して、ハイパーリンクを設定する、ということで質問させていただき、良い回答を頂き質問を閉じましたが、また質問があります。 A列をクリックするとイベントを発生させるのを、 A4セルから、その下のデータが入っているセルまで をイベントが有効な範囲にしたいと思い、考えています。 「If Target.Column = 1 Then」の部分がそれだと思い、 If Target.Range("A4", Range("A" & Rows.Count).End(xlUp)) Then のように考えて実行しましたが、これはダメでした。 このように限られた範囲に変更すにはどのようにすればいいでしょうか? Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const path As String = "D:\TEMP\倉庫\" Dim wkStr As String  If Target.Column = 1 Then   wkStr = path & Target.Value   If Dir(wkStr, vbDirectory) = vbNullString Then    MsgBox wkStr & "フォルダがありません。作成します。"    MkDir wkStr   Else    MsgBox wkStr & "フォルダは存在します。"   End If   ActiveSheet.Hyperlinks.Add Anchor:=Target, Address:=wkStr  End If End Sub

  • エクセルVBAでシートモジュールでのパブリック変数

    エクセル2000です。 標準モジュールで取得したパブリック変数は他のシートモジュールで参照できますが、逆にシートモジュールで取得したパブリック変数は他のシートで参照できないのでしょうか? シートチェンジイベントで取得した文字列を変数nmに格納し、ワークブックモジュールで呼び出そうとしたら何もでてきませんでした。 どうやったらよいのでしょうか? 'シートモジュールの記述 Public nm As String Private Sub Worksheet_Change(ByVal Target As Range) Dim rw As Integer If Intersect(Target, Range("A1").CurrentRegion) Is Nothing Then Exit Sub If Selection.Count > 1 Then Exit Sub rw = Target.Row nm = IIf(Cells(rw, "A") = "", Cells(rw, "A").End(xlUp).Value, Cells(rw, "A").Value) 'MsgBox nm End Sub 'ThisWorkbookモジュールの記述 Private Sub Workbook_BeforeClose(Cancel As Boolean) If nm = "" Then Exit Sub MsgBox nm & "さん、ご苦労様でした。" End Sub

  • VBAの移行

    エクセルからリブレに移行するにあたり、 エクセルで機能していたVBAコード: Function BeepMe() As String Beep BeepMe = "" End Function を Option VBASupport 1 REM BASIC Sub Main Function BeepMe() As String Beep BeepMe = "" End Function Sub Macro1 End Sub と書き換えました。 でもこれではエラーになってしまいます。 詳しい方、教えてください。

  • VBA 実行時エラー1004 range・・・

    【VBA 実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクト】 Excel Book内のあるシートで、 【数量の入っていない行を非表示にする】 【それを解除して全表示にする】 という二つのマクロを使用しています。 このシートのシート名を変更したところ、上記のエラーが出るようになってしまいました。 シート名をもとに戻せば出なくなります。 当方、VBAには詳しくないので、シート名を変えてもこのエラーが出なくなる方法を考え付きません。 エラーからデバッグを表示すると下記記述の窓が開きました。 ===ここから=== Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink) Application.Goto Excel.Range(Target.SubAddress), True End Sub ===ここまで=== 『Application.Goto Excel.Range(Target.SubAddress), True』の部分が黄色になっていて、その中の『Target.SubAddress』にカーソルを合わせると、 『Target.SubAddress=”(変更前のシート名)”』がポップアップします。 どこかでシート名の変更をすればいいのだろう、という事は察するのですが、それをどうやったらいいのかがわかりません。 使っているマクロの内容は下記です。 ===== 【数量の入っていない行を非表示にするマクロ】 Sub まとめ() ' ' まとめ Macro ActiveSheet.Range("$A$4:$T$2000").AutoFilter Field:=9, Criteria1:="<>" Range("B2").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True End Sub ===== 【それを解除して全表示にするマクロ】 Sub 解除() ' ' 解除 Macro ActiveSheet.Range("$A$4:$T$2000").AutoFilter Field:=9 Range("B2").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True End Sub ===== どこをどうやったらいいのでしょうか。 教えていただけませんでしょうか。

  • エクセルVBAで Cancel=Trueの使い方

    Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub Cancel = True MsgBox "キャンセルしました" End Sub Private Sub Worksheet_Deactivate() Cancel = True MsgBox "キャンセルしました" End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Cancel = True MsgBox "キャンセルしました" End Sub 以上のように使ってみましたが、どれも「キャンセルしました」とメッセージは出るものの、直前の操作(入力、シート切替、セル移動)はキャンセルされませんでした。 どこが間違っているのでしょうか?

  • 【VBA】ユーザ定義関数が動かない

    【VBA】ユーザ定義関数が動かない 下記のようなプログラムをVBEの標準モジュールに記述して、 ワークシートの適当なセルに「=tc("aa","bb")」と入力してEnterを押した所 セルの表示が「=tc("aa","bb")」となってしまい狙った効果が得られません。 本当は、「aabb」と表示させたいのですが、なぜうまくいかないのでしょうか。 ご教授願います。 ◆関数の仕様  引数1と引数2に入力された文字列を連結して返り値として返す。 ◆コード Function tc(str1 As Range, str2 As Range) As String Dim Str As String Str = str1.Value & str2.Valuett tt = Str End Function

  • エクセル デバッグできるのとできないのがある

    シートイベントについて教えてください。 シートモジュールに --------------------------------------------------------- Option Explicit Private Sub Worksheet_Activate() MsgBox "" End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) MsgBox "" End Sub Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "" End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) MsgBox "" End Sub --------------------------------------------------------- と記載した時に、 F8で動かせるのは、Worksheet_Activateだけなのですがなぜでしょうか? ほかのイベントは、F8で実行させても、OSの音が鳴るだけで、マクロの実行はされません。 ご回答よろしくお願いします。

専門家に質問してみよう