Excel VBAで各シートのA1セルにハイパーリンクの設定方法 Q&A  

Hello, Guest! | Sign in | help | okyuu.com Feed Feed

top / questions / Programming questions / Algorithm questions / Excel VBAで各シートのA1セルにハイパーリンクの設定方法
okyuu.comは、2010年9月21日正午をもってサービス終了とさせていただきます。また、2010年6月21日正午以降の投稿およびコメント、回答ができなくなりますのでご注意ください。

0

0
votes
Excelのシートの状態として・・・
  • シートは複数あります。
  • 最初のシート名は一覧
  • そのほかのシートはその一覧シートからハイパーリンクで移動できるようになっている。
    • 「 ほげ1」、「ほげ2」見たいなシート名です。
タイトルの通り各シートのA1セル(一覧シートは除く)に一覧シートへのハイパーリンクを設定するVBAを考えているのですが、中々いい案、処理が浮かばないのが現状です。 ちなみにVBAに関しては全くの初心者です。 ご教授いただけると嬉しいです。

  • answers (7)
  • clip count (0)
  • access count (5356)
  • Tag 

  • answer

0

0
votes
2番目のシートを選択して頂いて、下記のマクロを実行頂くと2番目以降のシートのA1セルに「一覧」シートへのハイパーリンクを設定します。
べた書きですが。。。


raw embed
Sub Macro1()
'
' Macro1 Macro
'

'
    On Error GoTo errorend
    
    Do While True
        Range("A1").Select
        ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="一覧!A1", TextToDisplay:="一覧へ"
        
        ActiveSheet.Next.Select
    Loop

errorend:
    
        
End Sub

0

0
votes
> bekobekohekomiさん
コメントありがとうございます。
早速、このVBAのコードを実行してみました。
実行したところ、2番目のシートにはハイパーリンクが作成されたのですが、それ以降のシートには作成されませんでした。
シート1つ1つにこのVBAを登録?(Visial Basic Editorの左に表示されるシート分ということ)しないといけないのでしょうか?
試しに登録したところ1つ1つのシートでこのコードを実行したところ一覧へのハイパーリンクが作成されました。

ご確認ください。

0

0
votes
もしかして3番目のシートを非表示にされてますか?
ActiveSheet.Next.Selectで次のシートをアクティブにさせているだけなので、
非表示にしていると動かないですね。

これで表示しているシートだけハイパーリンクを埋め込みます。
またべたがきですが、「一覧」のシートだけ除外するようにしています。
raw embed
Sub Macro1()
'
' Macro1 Macro
'

'

    For Each s In Sheets
        If Sheets(s.Name).Visible = True And s.Name <> "一覧" Then
            s.Select
            Range("A1").Select
            ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="一覧!A1", TextToDisplay:="一覧へ"
        End If
    Next s

End Sub


0

0
votes
> bekobekohekomiさん
3番目のシートは非表示にしていません。
再度このコードで試しました。
今度は「400」と表示され、エラーになってしまっています。

0

0
votes
こんなではだめですか?
※既に「シート一覧」というシート名が存在する場合、エラーになります。


raw embed
Sub create_list()
    Dim wsList As Worksheet
    Dim wsTmp As Worksheet
    Dim i As Long
    
    ' 一覧用シート作成
    Const LIST_NAME As String = "シート一覧"
    Set wsList = ActiveWorkbook.Worksheets.Add(Before:=ActiveWorkbook.Worksheets(1))
    wsList.Name = LIST_NAME

    ' セル行数セット
    i = 1
    
    ' 全てのシートに対しての処理
    For Each wsTmp In ActiveWorkbook.Worksheets
        ' 一覧シート自体は処理から除く
        If wsTmp.Name <> LIST_NAME Then
            ' シート名
            wsList.Range("A" & i).Value = wsTmp.Name
            
            ' ハイパーリンク
            wsList.Hyperlinks.Add wsList.Range("A" & i), "", "'" & wsTmp.Name & "'!A1", , wsTmp.Name
            
            ' セル行数追加
            i = i + 1
        End If
    Next
    
End Sub

0

0
votes
一覧から各シートではなく、各シートから一覧なんですね。
失礼しました。逆ですね。
こんな感じでできるのではないかと。


raw embed
Sub create_links()
    Dim wsTmp As Worksheet
    Const LIST_NAME As String = "一覧"

    ' 全てのシートに対しての処理
    For Each wsTmp In ActiveWorkbook.Worksheets
        ' 一覧シート自体は処理から除く
        If wsTmp.Name <> LIST_NAME Then
            wsTmp.Range("A1").Value = LIST_NAME & "へ"
            wsTmp.Hyperlinks.Add wsTmp.Range("A1"), "", "'" & LIST_NAME & "'!A1", , LIST_NAME & "へ"
        End If
    Next
End Sub

0

0
votes
> kazさん
コメントありがとうございます。
早速VBAのコードを実行してみました。

一覧のシート以外のシートに一覧へのハイパーリンクが作成されました!
ありがとうございます。

これでもやもやがとれました。
コメントいただいた御二方ありがとうございますm(_ _)m

3
1
answer
0
1
answer
(2010/04/22 11:13)
0
2
answer
(2009/10/13 02:42)
1
3
answer
(2009/04/20 05:17) by sasagon
1
2
answer
(2009/08/24 06:39)
3
8
answer
  

choose a provider