1

Excel 2010 を使用して、各行の G 列にハイパーリンクを作成したいと思います。

この列には、ハイパーリンクの表示テキスト (またはフレンドリ名) として使用される情報が既に保持されています。

ハイパーリンクが正しい場所を指すようにするには、列 M が保持する番号が必要です。一致する情報は常に同じ行にあります。

基本的に、これは特定の行の 2 つのセルに含まれる 2 ビットの情報をマージしたものにすぎません。

これは私が始めたものです:

    Sub Macro2()
'
' Macro2 Macro
'
Dim Name As String
Dim Branch As String

' Combination of two rows
Dim CombineRow As Range

Dim cell As Range
Dim row As Range
Dim Branch_ID As Range

Set Branch_ID = Worksheets("Default").Range("M2")

Set CombineRow = Range("G2:M2")

For Each row In CombineRow.Rows
     For Each cell In row.Cells
        Branch = Branch_ID.Cells.Value
        Name = Name_ID.Cells.Value
        ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
            "https://www.example.com/", SubAddress:= _
            "something:", _
            TextToDisplay:=Name
        Next cell
        ' relative one row down
        Set Branch_ID = Branch_ID.Offset(1, 0)
        Set Name_ID = Branch_ID.Offset(1, 0)
    Next row
End Sub

わからない600021610のは、ハイパーリンクの末尾に列 M (例: ) の値を付ける方法です。

私はここで正しい道を進んでいますか?

編集:

私が今持っているのはこれです:

Sub Macro2()
'
' Macro2 Macro
'
Dim Branch As String
Dim Name As String

' combine two rows
Dim CombineRow As Range

Dim cell As Range
Dim row As Range
Dim Branch_ID As Range
Dim Name_ID As Range

Set Branch_ID = Worksheets("Default").Range("M2")
Set Name_ID = Worksheets("Default").Range("G2")

Set CombineRow = Range("G2:M2")

For Each row In CombineRow.Rows
    For Each cell In row.Cells
        Branch = Branch_ID.Cells.Value
        Name = Name_ID.Cells.Value
        ActiveSheet.Hyperlinks.Add Anchor:=Name_ID, Address:= _
            "https://www.example.com/", SubAddress:= _
            "something" & Branch, _
            TextToDisplay:=Name
        Next cell
        Set Branch_ID = Branch_ID.Offset(1, 0)
        Set Name_ID = Name_ID.Offset(1, 0)
    Next row
End Sub

これは機能しますが、最初の行のみです。なぜループしないのですか?これはCombineRow本当に正しいのでしょうか、それともこれである必要がありますG:G;M:Mか?

を入れても問題ないDo ... Whileので、ループを使用することも想像できます。end_tag

4

3 に答える 3

2

hyperlinks.add の引数に変数を使用してみてください。

dim addressStr as string
dim targetRng as Range

For Each row In CombineRow.Rows
     For Each cell In row.Cells
        Branch = Branch_ID.Cells.Value
        Name = Name_ID.Cells.Value

        set targetRng = range("A1")   'change this to whatever you want it to be each loop
        addressStr = "https://www.example.com/" & cells(cell.row,15).value

        ActiveSheet.Hyperlinks.Add Anchor:=targetRng , Address:= _
            addressStr, SubAddress:= _
            "something:", _
            TextToDisplay:=Name
        Next cell
        ' relative one row down
        Set Branch_ID = Branch_ID.Offset(1, 0)
        Set Name_ID = Branch_ID.Offset(1, 0)
    Next row<BR>
End Sub<BR>

また、オフセットで Name_ID と Branch_ID を同じ値に設定しています。


ループでは、1 行のみをループします (範囲はすべて行 2 内にあるため)。したがって、唯一のループはセルです-ループの後に発生するため、ブランチ/名前IDを異なる方法で設定することはありません:

For Each cell In row.Cells
    'stuff
Next cell

Set Branch_ID = Branch_ID.Offset(1, 0)
Set Name_ID = Name_ID.Offset(1, 0)

したがって、ハイパーリンク関数を呼び出すたびに、同じ Name_ID 範囲を使用しています。Offset は Offset(row,column) であり、水平方向の範囲を反復しているように見えるため、これらの Offset(0,1) を作成することもできます。

于 2012-08-15T13:03:28.573 に答える
1

単純に&演算子を使用して文字列を連結し、URL を作成できます。

addressStr = "https://www.example.com/" & <<Specify Cell for M Column and Row>>
于 2012-08-15T13:04:35.623 に答える
0

できます!
ご協力いただきありがとうございます。
解決策は (G2:M2) を配置することではありませんでした。これは、7 つのハイパーリンクが作成されるだけだからです。
代わりに、(G:M) and and IF を配置して、セルが既に空の場合に無意味なハイパーリンクを作成しないようにします。

    Sub Macro2()
'
' Macro2 Macro
'
Dim Branch As String
Dim Name As String

' combine two rows
Dim CombineRow As Range

Dim cell As Range
Dim row As Range
Dim Branch_ID As Range
Dim Name_ID As Range

Set Branch_ID = Worksheets("Default").Range("M2")
Set Name_ID = Worksheets("Default").Range("G2")

Set CombineRow = Range("G:M")

For Each row In CombineRow.Rows
For Each cell In row.Cells

    Branch = Branch_ID.Cells.Value
    Name = Name_ID.Cells.Value

    If Name <> "" Then

        ActiveSheet.Hyperlinks.Add Anchor:=Name_ID, Address:= _
            "https://www.example.com", SubAddress:= _
            "something" & Branch, _
            TextToDisplay:=Name

    Set Branch_ID = Branch_ID.Offset(1, 0)
    Set Name_ID = Name_ID.Offset(1, 0)

    End If

    Next cell

    Next row

End Sub

私は、特に IF 構造において、改善の余地がたくさんあることを確信しています。
しかし、これまでのところ、それは機能します。これは、これを改善するためのコメントを差し控えるべきだという意味ではありません;)。これらは基本的に VBA での私の最初のステップでした! :)

于 2012-08-16T13:20:02.690 に答える