こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Excel VBAで自動的にハイパーリンクを設定する方法について教えて

Excel VBAで自動的にハイパーリンクを設定する方法について教えてください。
VBAについては、ほとんど初心者なので、どうやって良いのか分かりません。
やりたい作業については、あるExcelのブックに一覧表があり、その一覧表のIDと合致したファイルをハイパーリンクさせたいのです。
一覧表は、
ID    項目  ・・・VBA
A-0001  aaaa
B-0002  bbbb
の様になって、VBA列のセルをアクティブにするとID列のセルに自動でハイパーリンクが設定される。
そして、リンクをさせたいファイル名が"A-0001 aaaa・・・"となっているので
頭の6文字が合致したら、そのファイルを選択してくれるようにしたいです。

説明が下手で申し訳ありませんが、皆様のお知恵をお貸しください。

出来れば・・・ボタンを押すとリンクが貼ってないIDは、全てリンクがかかるようにもしたいのですが・・・。
欲張りを言って申し訳ありません。

宜しくお願いいたします。

投稿日時 - 2010-06-16 13:44:39

QNo.5972594

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

15人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

間違った説明:
>リンクをさせたいファイル名が"A-0001 aaaa・・・"となっているので
>頭の6文字が合致したら、そのファイルを選択してくれるようにしたいです。


本当のこと?:
そのファイルが入っている場所は、他のPC(ネットワークで繋がっています)の
>「専用」フォルダー⇒「2010年度」フォルダー⇒「A」フォルダー⇒「0001~0050」の中なのですが、




出来ていないことその1:
「Aフォルダの中の」という新しく出てきた部分が,マクロに書かれていないので書かないと出来ません。


出来てない上に謎のことその2:
「0001~0050」の中とは,Aフォルダの中に「0001~0050」という名前のフォルダがあって,その中に「BBB」というファイルが実はあるのか。

それとも
A-0001は,Aフォルダの中の0001フォルダの中に,「A-0001なんたらかんたら.doc」とかのファイル
B-0023ならBフォルダの中の0023フォルダの中に,「B-0023なんたらかんたら.xls」とかのファイル
がそれぞれ一個ずつ入っていると言いたかったのか。




次の前提で回答します。説明不足でまだ前提が間違っている部分は,回答を応用して少し自力で作成してみてください。

前提:
A列にA-0011のように記入されている
すると\\Sa01\専用\2010年度\A\0011\の中に「A-0011 なんたらかんたら.doc」あるいは「A-0011 なんたらかんたら.xls」のような名前のファイルが1個入っているので,それに向けてハイパーリンクを取り付けたい。

マクロの作成例:
sub macro1r1()
 dim h as range
 dim s as string
 dim myPath as string
 
 activesheet.hyperlinks.delete
 for each h in range("A2:A" & range("A65536").end(xlup).row)
  mypath = "\\Sa01\専用\2010年度\" & application.substitute(h, "-", "\") & "\"
  s = dir(mypath & h & "*.*")
  if s <> ""then
   activesheet.hyperlinks.add anchor:=h, address:=mypath & s
  end if
 next
end sub

投稿日時 - 2010-06-19 01:14:47

お礼

ご回答ありがとうございます。
説明不足で本当に申し訳ありませんでした。m(_ _;m)三(m;_ _)m
まだまだ説明不足のようなのですが、今回ご回答いただいたものを参考に少し自分で作成してみようと思います。
もし、試行錯誤の上行き詰ってしまったら、また質問させていただくかもしれませんが、
宜しくお願い致します。(o*。_。)o

【補足】
目的のファイル(例:『A-0001 何たらかんたら.doc』)が入っている場所:\\Sa01\専用\2010年度\A\0001~0050\ で
「0001~0050」フォルダーの中には、複数のファイルが入っています。

投稿日時 - 2010-06-19 16:16:50

ANo.1

>頭の6文字が合致したら、そのファイルを選択してくれるようにしたいです。

つまりID(6文字)だけチェックすればよくて,B列にデータで入っている項目は関係ないのですね。


手順:
ALT+F11を押す
挿入メニューから標準モジュールを選ぶ
現れたシートに下記をコピー貼り付ける


sub macro1()
 dim h as range
 dim s as string
 dim myPath as string

 'ファイルの在処を下記に正しく記入すること
 myPath = "C:\test\"

 activesheet.hyperlinks.delete
 for each h in range("A1:A" & range("A65536").end(xlup).row)
  s = dir(mypath & h & "*.*")
  if s <> ""then
   activesheet.hyperlinks.add anchor:=h, address:=mypath & s
  end if
 next
end sub

ファイルメニューから終了してエクセルに戻る
オートシェイプの図形などでボタンの絵柄を作成してシート上に配置する。適当なリンクバナーの画像とかでも良い。
右クリックしてマクロの登録を開始し,さっき登録したMacro1を取り付ける

以上です。

投稿日時 - 2010-06-16 20:03:25

補足

お世話になっております。
ご回答頂いたとおりにやってみたのですが・・・
ハイパーリンクがかかりません(T-T)エラーは、出ないのですが・・・。
VBAに書き込んだ文をそのまま書きます。

Sub macro1()
Dim h As Range
Dim s As String
Dim myPath As String

'ファイルの在処を下記に正しく記入すること
myPath = "\\Sa01\専用\2010年度\"

ActiveSheet.Hyperlinks.Delete
For Each h In Range("A1:A" & Range("A65536").End(xlUp).Row)
s = Dir(myPath & h & "*.*")
If s <> "" Then
ActiveSheet.Hyperlinks.Add anchor:=h, Address:=myPath & s
End If
Next
End Sub

ご回答頂いたものをコピーして貼付けただけなのですが・・・。(ファイルの在処のみ変更)
私の説明不足だと思いますので、もう一度詳しく説明させていただきます。
A列   B列   ・・・
A-0001 BBB
A-0002 BBB       となっている一覧があります。
この一覧のA列に入っている"A-0001"をIDとして他のフォルダーにあるファイルをハイパーリンク設定したいです。
リンク先のファイル(殆どがwordかexcelです)は、"A-0001 資料1"のような名前になっています。
そのファイルが入っている場所は、他のPC(ネットワークで繋がっています)の「専用」フォルダー⇒「2010年度」フォルダー⇒「A」フォルダー⇒「0001~0050」の中なのですが、
 IDが"B-0001"や"C-0001"と種類がたくさんあり、それ毎にVBAを組み直すのは、手間がかかってしまうので
「2010年度」フォルダーの中から探し当ててもらえると嬉しいです。出来ますでしょうか?
それから・・・もしリンクがかかったら、どこにかかるようになっているのでしょうか?(どこかのセル?)
無知で申し訳ありません(+_+;
お手数をお掛けして申し訳ありませんが、宜しくお願い致します。

投稿日時 - 2010-06-18 12:06:50

お礼

初心者の私にも分かり易い丁寧なご回答ありがとうございますm(_ _)
初めてこの場で質問させて頂いたので、とても嬉しかったです(=⌒ー⌒=)
本当に感謝してます。

早速、教えて頂いた様にやってみます。
また結果をご報告致します。

投稿日時 - 2010-06-17 19:42:11

あなたにオススメの質問