dポイントプレゼントキャンペーン実施中!

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

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

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

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

A 回答 (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
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2010/06/19 16:16

>頭の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を取り付ける

以上です。

この回答への補足

お世話になっております。
ご回答頂いたとおりにやってみたのですが・・・
ハイパーリンクがかかりません(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
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2010/06/17 19:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています