• ベストアンサー

エクセルのマクロについてです。

すいません。教えてください エクセルのハイパーリンクを一括で登録したいです。 Dの列に品番がずらっとのっていて、その各行ごとのHの列にハイパーリンクを別のフォルダに格納されている、エクセルの同じ品番を検索して貼りたいです。マクロ初心者で大変なやんでます。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

「作業指示書」というフォルダー内にあるエクセル(拡張子.xls)にハイパーリンクを挿入するんですね? ファイル名は「品番別リスト」という名のワークシートのD10からD3000に記入されている文字列に一致するんですね? D列には拡張子.xlsはつけてないですね? 以上の前提でよければ、これでどうでしょう? 「作業指示書」というフォルダー内を検索し、D列と同名のエクセルファイルがあったらハイパーリンクを挿入します。 Sub test01()   Dim pth As String   pth = "C:\Documents and Settings\Administrator\デスクトップ\作業指示書\"   With Sheets("品番別リスト")     For i = 10 To 3000       If Dir(pth & .Cells(i, "D") & ".xls") <> "" Then         .Hyperlinks.Add Anchor:=.Cells(i, "H"), Address:=pth & .Cells(i, "D") & ".xls", TextToDisplay:="Here"       End If     Next i   End With End Sub これでどうでしょう?

rostra
質問者

お礼

ありがとうございます。あっという間にできました。無知ですいません。日々精進します。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

最初に、私個人としては、ハイパーリンクを何千個も並べるのは、得策ではないような気がします。ブック名・シート名・セルアドレスが取れれば、それで良いはずです。後は、ダブルクリリックして飛べば済むはずです。それは、大きな問題ではありません。 Here というのは何かは分かりませんが、フォルダのブック内全部を何千回も検索するということになると、負担が大きすぎます。せめて、検索するブックやシートや列を限定出来ればよいと思いますが、今のような質問のままですと、マクロの書き方によっては、Excelがフリーズするかもしれません。 怖い物知らずで、そのままコードを書く人はいるかもしれませんが、明らかにする部分として、品番に対して、ファイル名の関連性があるなら、その関連する部分の特徴を、また、シートが決まっているならシート名を、列が決まっているなら列を特定してください。常識的には、まったくのランダムで入れられているとは思えません。そういうことを教えなままに、「マクロを書け」というのは無理があるような気がします。 もう少し、実際に近い情報を出していただいたかないと、解決はは難しいのではないかと思います。別に、教えないなら教えないままで、やってみるしかないけれども、このままでは手を付けにくいと思います。私も、元の質問からは、#1さんのイメージと同様に受け取りました。

rostra
質問者

お礼

ありがとうございます。闇雲にマクロをしようするんじゃなくて、いろんな障害を考えてBESTなプログラムを適用するのが本当のプログラマーですね。まだぜんぜん余裕がありません。勉強になりました。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

取りあえずこんな感じになりました。 リンク先のブックを開いておいて実行してください。 実状に合わせてブック名とかは書き換えてください。 For Each ・・・Next文でループしながら総当たりでデータを比較 同じデータがあったところで、Hyperlinks.Addしています。 Dim hwb As String, jwb As String Dim hws As String, jws As String Dim hrng As Range, jrng As Range Dim ch As Range, cj As Range hwb = "AAA.xls" jwb = "BBB.xls" hws = "Sheet1" jws = "Sheet2" Set hrng = Workbooks(hwb).Worksheets(hws).Range("D1:D10") Set jrng = Workbooks(jwb).Worksheets(jws).Range("A1:A10") For Each ch In hrng For Each cj In jrng With cj If ch.value = .value Then Workbooks(hwb).Worksheets(hws).Hyperlinks.Add _ Anchor:=ch.Offset(, 4), Address:=jwb, _ SubAddress:=jws & "!" & cj.Address, TextToDisplay:=ch.value Exit For End If End With Next Next ≪参考≫ ハイパーリンクでシートチェンジ http://itpro.nikkeibp.co.jp/article/COLUMN/20101215/355269/?ST=develop&P=2

rostra
質問者

お礼

僕にとってはとてもHIGH-LEVELなプログラムです。 とても勉強になりました。ありがとうございます。

rostra
質問者

補足

すいません。迅速な回答ありがとうございます。ほんと無知ですいません。 細かい内容をいいますと、品番別リストというエクセルのファイルの品番別リストというworksheetの(D10:D3000)の中の品番(K10-1-0など..)の値を C:\Documents and Settings\Administrator\デスクトップ\作業指示書にあるフォルダの中のエクセルファイル(いっぱい)を検索して(K10-1-0.exlなど...)それぞれ(H10:H3000)に行単位で一括登録していです。(Hの列にはHereがずらっと並んでます。そのHereをクリックするとその品番のエクセルファイルに飛ぶ感じです。)ほんとうにすいません。