• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルマクロによるハイパーリンクの方法)

エクセルマクロによるハイパーリンクの方法

このQ&Aのポイント
  • エクセルマクロを使用して、セルに書かれた文字列に対応するハイパーリンクを作成する方法について質問します。
  • 質問者は、マクロ.xlsファイルとdataフォルダ内にある複数のPDFファイルがあり、マクロを使ってセルに書かれた文字列をクリックすると対応するPDFファイルが開くようにしたいと考えています。
  • 現在、質問者はセルに書かれた文字列を変数に代入し、ワイルドカードを使って対応するPDFファイル名を取得することに問題があるようです。ご解答をお待ちしています。

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

  • ベストアンサー
回答No.2

> マクロ.xlsのセルA1~A10に適当な英数字の文字列(A123,B243,C072  …など)が書かれていて セルの文字列がすべて4桁という前提ですが。 ' Sub AAA()  Dim i As Integer, N As Integer, TargetFile As String  i = 1  Do While Cells(i, 1) <> ""   N = 0   TargetFile = Dir$("C:\_Anns\file\data\*.pdf")   Do While TargetFile <> ""    If Left(TargetFile, 4) = Cells(i, 1) Then     ActiveSheet.Hyperlinks.Add Anchor:=Range(Cells(i, 1).Address), _           Address:="C:\_Anns\file\data\" & TargetFile     GoTo Nxt    End If    TargetFile = Dir$   Loop Nxt: i = i + 1  Loop End Sub

guardian01
質問者

お礼

早速のご回答ありがとうございます。 このプログラムで一応ハイパーリンクできました。 ありがとうございます。 重ねてお願いなのですが、セルの文字数は9~15文字でランダムに書かれています。 したがってPDFファイル名="Cell(i,1)"と*と& ".pdf"を使って完全一致させたいのですがどうすればいいでしょうか? 質問は締め切っておりませんので、ご回答いただけると非常に助かります。 よろしくお願い致します。 P.S 教えて!gooをはじめて使うので御礼のポイントを差し上げたいのですがどうすればよいでしょうか?

その他の回答 (4)

回答No.5

> セルへの入力ミスやファイルの欠如がありえる ということですので、リンク対象のファイルを次のようにしました。 a.ファイルの"("までの文字列とセルの文字列が同じ。 b."("がつかないファイルは、ファイル名の先頭数文字がセルと同じ。 c.PDFに限らず、すべての拡張子が対象。   限定が必要な場合は、 myDir & "*.*" を myDir & "*.pdf" に   書き換えます。 ' Sub BBB()  Dim myDir As String  Dim i As Integer, N As Integer, TargetFile As String  myDir = "C:\_Anns\Zone_2\data\"  '←実際のフォルダ名に書換え  i = 1  Do While Cells(i, 1) <> ""   N = 0   TargetFile = Dir$(myDir & "*.*")   Do While TargetFile <> ""    Select Case InStr(TargetFile, "(") - 1     Case Is > 0      If Left(TargetFile, InStr(TargetFile, "(") - 1) = Cells(i, 1) Then       GoTo Lnk      End If     Case Else      If Left(TargetFile, Len(Cells(i, 1))) = Cells(i, 1) Then       GoTo Lnk      End If    End Select    TargetFile = Dir$   Loop   GoTo Nxt Lnk: ActiveSheet.Hyperlinks.Add Anchor:=Range(Cells(i, 1).Address), _           Address:=myDir & TargetFile Nxt: i = i + 1  Loop End Sub これから出かけてしまいますが、最後に―― > エクセルマクロを始めたばかり と書かれていたことに、いま気づきました。 マクロのお勉強中のようですが、私の記述はまったくの我流で、「動けばいいや」と いうものです。(無責任!) VBAの正しい文法や記述につきましては、書物やVBA専門のサイトを見てください。

guardian01
質問者

お礼

重ね重ねご回答ありがとうございます。 If Left(TargetFile, InStr(TargetFile, "(") - 1) = Cells(i, 1) Then 今までの作成したプログラムの一部に上の一行を利用させて頂きました。 misatoannaさんには何度も回答いただき本当にありがとうございました。 これをつかってデータベースの方を作成して行こうと思います。

回答No.4

> このプログラムで一応ハイパーリンクできました。 よかったですね。  (^^) > セルの文字数は9~15文字でランダムに書かれています。 > PDFファイル名="Cell(i,1)"と*と& ".pdf"を使って完全一致させる。 dataフォルダ内にあるファイルは、A列のセルに書かれている不定長の 文字列に少し文字が追加された名前のPDFファイル。――ということで したら、  If Left(TargetFile, 4) = Cells(i, 1) Then の部分を  If Left(TargetFile, Len(Cells(i, 1))) = Cells(i, 1) Then と置き換えればよいでしょう。 ファイル名の左(先頭)から「セルの文字列と同じ長さ分」が同じなら、 という、LEFTワークシート関数の考え方です。

guardian01
質問者

お礼

またしても回答ありがとうございます。 こんなやり方があるなんて知りませんでした。 経験や発想やセンスの問題ですかね…。 核となる部分はmisatoannaさんに教えていただいたので後は自分の方で膨らませようと思います。 重ね重ね質問をお願いして申し訳ないのですが、 もし時間があるようでしたらお答えいただけると助かります。 仮にセルA1にA123、B1にA1234が入力されていたときに dataフォルダ内にA123(OK).pdfファイルが存在せず A1234(OK).pdfファイルのみ存在していた場合、 セルA1、B1ともにA1234(OK).pdfファイルがリンクされますよね? こういった場合にセルA1は本来A123(OK).pdfファイルがリンクされるべきなので、 セルA1にはA1234(OK).pdfはリンクさせず、セルB1のみにリンクさせるようにはできないでしょうか? (セルへの入力ミスやPDFファイルの欠如があると起こりえると思いましたので…) 参考になるかは分かりませんが、 PDFファイルにはセルの文字列の後に括弧"()"がついておりますので PDFファイルの"("までの文字列とセルの文字列が同じなら If文の処理をするという事はできないですかね…? misatoannaさんのお手数をおかけしない程度に考えていただけると非常に助かります。

回答No.3

#2です。 > Dir$("C:\_Anns\file\data\*.pdf") テスト用で使用したディレクトリ名をそのまま記述してしまいました。(^^ゞ 実際のディレクトリ名に置き換えてください。

  • get3
  • ベストアンサー率25% (2/8)
回答No.1

どのような場合にしようされるのでしょうか? マクロでないとだめですか? 挿入-ハイパーリンクが簡単ですが?

guardian01
質問者

お礼

早速のお返事ありがとうございます。 エクセルシートにいろいろな情報が書かれてありまして セルに書かれているファイルをすぐに参照したいと考えています。 データ量は今後増えていく予定で現在でも1000件以上あるので 今後のことを考えるとマクロで一発でリンクさせてもらえると効率的と考えました。 ご回答ありがとうございました。

関連するQ&A