[[20220729202131]] 『文字に付いているハイパーリンクを別のセルに記載』(アポロ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『文字に付いているハイパーリンクを別のセルに記載のURLに自動で変更したい』(アポロ)

色々試したものの出来ず困っています。
お力お貸し下さい。

A1セルに「添付資料」と文字が書いてあります。
更に、その文字にはサーバー内のとあるフォルダ内のファイルへとハイパーリンクが付いています。
今回やりたい事は、そのリンクしているファイルを月が変わると別のファイルにリンクを差し替えたいです。
イメージ→今は「添付資料_7月10日.xlsx」のファイルに飛んでいるが、次の月には「添付資料_8月8日.xlsx」にリンクを変えたい。

例えば、別のセルにそのファイルのリンク先URLを貼っておいて、次の月になったら手動でURLを変えるとして、そのセルと「添付資料」の文字のセルをリンクさせて自動で変わるように出来ないか色々試しましたが、実現できませんでした。

最終的には、メールを自動作成するマクロがあり、その本文の中に
A1セルのリンク付きの「添付資料」を下記コードのように貼り付けています。

BN.Sheets("Sheet1").Range("A1").Copy
.Paste

宜しくお願いします。

< 使用 Excel:Office365、使用 OS:Windows10 >


>色々試したものの出来ず困っています。
どのようなことを試したのか、提示されてみてはどうでしょうか?

単純な手として、

 (1) ハイパーリンクが仕込んである文字列(あるいはセル)を片っ端から見つけて
 (2) リンク先が特定のキーワードを含んでいれば書き換え

というような方法でいけそうですが、既にためしたのでしょうか?

(もこな2) 2022/07/29(金) 20:51


もこな2様
アドバイスありがとうございます。
ハイパーリンクはA1セルに限定して仕込んであるので、
ハイパーリンクの置き換えをマクロでやってしまうというイメージでしょうか?
例えばA2セルに8月8日と書いてマクロを回したら、
添付資料_7月10日.xlsxの"_"以降をA2セルの内容に書き換える感じでしょうか?

こちらで試したのは、
A2セルにURLを貼って、それを文字列に設定してあるハイパーリンクで、
ドキュメント内のA2セルを設定しておけば変わらないか?と思ったのですが、
そうするとURL先ではなくA2セルに飛んでしまいました。

(アポロ) 2022/07/29(金) 21:28


# 素朴な疑問ですけど、
# セルの一部の文字列にリンクを張れるのですか?セル単位じゃないのですか?

リンク先が頻繁に変わるのであれば、
HYPERLINK関数を使うのが簡単ではないですか?
第一引数に、リンク先が書かれているセルを指定すればよいでしょう。
そうすれば、その特定セルを変更するだけで、リンクが変化します。

当然ながら、メールへのコピーペイストでリンクも併せてコピーされます。

(γ) 2022/07/29(金) 22:06


γ様
ありがとうございます。
セル単位でしかリンク貼れないので、今はリンクのセルと次に続く文字をセルを分けて
マクロでメールに貼り付ける時も、それっぽく繋がるように見せるようにしてます^^;

ハイパーリンク関数ですね!!
ありがとうございます。
求めているやり方にマッチしそうなので、早速トライしてみます。
(アポロ) 2022/07/29(金) 22:19


γ様
昨日はありがとうございました。
やりたかった事が実現できました。

もこな2様
アドバイスありがとうございました。
置き換えでも挑戦してみたのですが、マクロ知識が及ばす、エラー(オブジェクトは、このプロパティまたはメソッドをサポートしていません。)が出ます。

やろうとしたのは、A1セルに「添付資料」と書いたリンク付き(添付資料_7月10日.xlsxへのリンク)文字があり、
B2セルに「8月8日.xlsx」と記入したら、マクロを流すと、添付資料に埋め込まれたリンクが、"_"以降の7月10日.xlsxが、8月8日.xlsxに置き換わるというように作成したいです。

Sub link()

 With Sheets("sheet11")

     .Range("A1").adress = Replace(.Range("A1").adress, Mid(.Range("A1").Value, InStr(.Range("A1").Value, "_") + 1), .Range("B2").Value)
 End With

End Sub

よろしくお願いします。

(アポロ) 2022/07/30(土) 09:37


■1
>マクロ知識が及ばす、エラー(オブジェクトは、このプロパティまたはメソッドをサポートしていません。)が出ます。
繰り返しになりますが、【どのようなことを色々試した】のでしょうか?
一旦落ち着いて、そもそもVBAでハイパーリンクを設定するにはどういう命令を使うか調べてみてはどうですか?
少なくとも↓ではないことは理解できるでしょう。
 Range("A1").adress 〜〜〜

■2
>ハイパーリンクはA1セルに限定して仕込んである
>B2セルに「8月8日.xlsx」と記入したら、マクロを流すと、
わざわざ、B2セルに書き込むくらいならそのままA1セルをて修正したって手間は変わらないんじゃないかとおもいますが、学習用ですかね。
「■1」を調べてみればわかったと思いますが、ハイパーリンクを設定するには「Hyperlinks.Add メソッド」を使います。
例えばこんな感じです。

    Sub 研究用()
        Dim 配列 As Variant

        Stop 'ブレークポイントの代わり
        With Worksheets("Sheet11")
            配列 = Split(.Hyperlinks(1).Address, "\")
            配列(UBound(配列)) = .Range("A1").Value & "_" & Range("B1").Text & ".xlsx"
            .Hyperlinks.Add anchor:=.Range("A1"), Address:=Join(配列, "\")
        End With
    End Sub

(もこな2) 2022/07/31(日) 18:16


もこな2様
ありがとうございます。

ハイパーリンクの設定方法、調べてみた上で、
もこな2様の書いていただいた研究用コード理解しました。
(配列部分は完全に理解しきれていないので、別途配列のVBA勉強してみます)
とてもシンプルな考え方ですね。
ありがとうございます。大変勉強になります。
仰る通り、今一度落ち着いて勉強してみたいと思います。

(アポロ) 2022/07/31(日) 18:41


>配列部分は完全に理解しきれていないので
説明しようかどうしようか悩んで端折りましたが、やはり気になってしまいましたか。

一応説明しておくと【サーバー内のとあるフォルダ】と仰っているのでおそらく↓リンクアドレスは↓のようになってるはずです。

 \\123.456.789\hoge\hoge\添付資料_7月10日.xlsx

このうち、書き換えたいのはファイル名である「添付資料_7月10日.xlsx」だけなので、"\"を目印に↓のように切り分け

 【】【】【123.456.789】【hoge】【hoge】【添付資料_7月10日.xlsx】

このうち最後のものがファイル名であると特定しているのです。
ファイル名(の部分)だけ調べるのであれば、ほかにも後ろから"\"を探してみるとか、DIR関数でファイル名を調べてみるとか、アプローチがあるとおもいますし、そもそも【サーバー内のとあるフォルダ】が固定ならば、わざわざ調べる必要もないのですから、この辺はご自身でカスタマイズしてみてください。

(もこな2) 2022/07/31(日) 19:48


もこな2様
非常にご丁寧なご説明、ありがとうございます。
分解して頂いた事で分かってきました。
UBOUND(添え字の最大値)で、ファイル名部分を抜き出していたのですね。
VBAはほんと色々なアプローチがあるのですね。
配列を覚えるとVBAの幅が広がるとよく聞くので、頑張って勉強してみたいと思います。
ありがとうございました。
(アポロ) 2022/07/31(日) 20:22

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.