VBAでハイパーリンクをつける

このQ&Aのポイント
  • VBAを使用してExcelに画像のファイル名を書き出し、ハイパーリンクをつける方法について質問です。
  • 実行すると最初の一行だけハイパーリンクが作成されて、その後は作成されません。
  • 解決策を教えてください。
回答を見る
  • ベストアンサー

VBAでハイパーリンクをつける

仕事で画像のファイル名をExcelに書き出し、書き出しものにハイパーリンクで見がうまくいきません。下記のものです。どこが悪いのでしょうか? Option Explicit Dim ドライブ As String Dim フォルダ As String Dim 拡張子 As String Dim 記入シート As String Dim パス As String Dim ファイル名 As String Dim 貼付行 As Integer Sub フォルダ中のファイル名をシートに書く() ドライブ = "C" フォルダ = "分析" 拡張子 = "*." & "JPG" 記入シート = "ファイル一覧" End Sub Private Sub 指定フォルダ中の指定拡張子のファイル名をシートに書く() Sheets(記入シート).Activate Cells.Clear Range("A1").Select パス = ドライブ & ":\" & フォルダ & "\" ファイル名 = Dir(パス & 拡張子) 貼付行 = 0 Do While ファイル名 <> "" 貼付行 = 貼付行 + 1 Cells(貼付行, 1).Value = ファイル名 ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=ファイル名, TextToDisplay:=ファイル名 ファイル名 = Dir() Loop End Sub 実行すると初めの一行だけリンクができ後は一行もできません。よろしくお願い致します。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

>Anchor:=Selection になってるからじゃないですか Anchor:=Cells(貼付行, 1) にしてみたらどうでしょう

cocoku
質問者

お礼

できました。ありがとうございます。 ディスプレイの拡張子をはぶくものは 別で、質問したいと思います。 ありがとうございました。

cocoku
質問者

補足

できました!ありがとうございます。 TextToDisplayで拡張子が○○○.jpgと着きますが この拡張子無しで表示したいのですが この部分を消しても意味はないのですね。 (1)Dim 拡張子 As String (2)拡張子 = "*." & "JPG" (3)ファイル名 = Dir(パス & 拡張子)⇒この「&拡張子」の部分 たぶんこのDirに意味があるのでしょうか?

その他の回答 (1)

回答No.2

ANo.1の方の方法でもいいですが、そうすると下記の※の部分の意味がなくなります。 且つそこが問題点なのですが・・・ Private Sub 指定フォルダ中の指定拡張子のファイル名をシートに書く()   Sheets(記入シート).Activate   Cells.Clear   Range("A1").Select '※   パス = ドライブ & ":\" & フォルダ & "\"   ファイル名 = Dir(パス & 拡張子)   貼付行 = 0   Do While ファイル名 <> ""     貼付行 = 貼付行 + 1     Cells(貼付行, 1).Value = ファイル名     ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=ファイル名, TextToDisplay:=ファイル名     ファイル名 = Dir()   Loop End Sub ※の箇所で選択しているのはA1のセルのみです。 一方で、ActiveSheet.Hyperlinks.Addメソッドで、Anchor:=SelectionとしてSelectionプロパティ を指定していますから、選択されている部分しか追加されません。 従って、Range("A1").Selectで選択されているセルにしか追加されません。 【対処方法】   Do While ファイル名 <> ""     貼付行 = 貼付行 + 1     Range("A" & CStr(貼付行).Select   ’変更点     Selection.Value = ファイル名     ’変更点     ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=ファイル名, TextToDisplay:=ファイル名     ファイル名 = Dir()   Loop という形にして、逐次セル単位でセレクトをかける形にすればいいと思います。 動作確認:Windows2000 Professional SP2、Office2000

関連するQ&A

  • ExcelVBAでフォルダーからファルイ名を書き出しリンクを貼り、表示名を変える

    下記のようなVBAをつくったのですがうまく行きません。 Option Explicit Dim ドライブ As String Dim フォルダ As String Dim 拡張子 As String Dim 記入シート As String Dim パス As String Dim ファイル名 As String Dim ディスプレイ As String  Dim 貼付行 As Integer Dim ハイパーリンク As String Dim strVal As Variant 'Sub フォルダ中のファイル名をシートに書く() ドライブ = "C" 'ドライブを指定する フォルダ = "M.Co,\My Documents" 拡張子 = "*." & "JPG" 記入シート = "ファイル一覧" End Sub Private Sub 指定フォルダ中の指定拡張子のファイル名をシートに書く() Sheets(記入シート).Activate Cells.Clear 'すべてクリア Range("A1").Select パス = ドライブ & ":\" & フォルダ & "\" 'パスを組む ファイル名 = Dir(パス & 拡張子) strVal = Dir(パス & 拡張子) (1)ディスプレイ = Left(strVal, "SEARCH(""."",strVal)-1") 貼付行 = 0    Do While ファイル名 <> ""    貼付行 = 貼付行 + 1 Cells(貼付行, 1).Value = ファイル名 ActiveSheet.Hyperlinks.Add Anchor:=Cells(貼付行, 1), Address:=ファイル名, TextToDisplay:=ディスプレイ ファイル名 = Dir() '次のファイル名を取り出す Loop End Sub (1)がおかしいです。よろしくお願い致します。

  • VBAのハイパーリンクにつきまして

    以前に質問をさせていただき、こちらでベストアンサーを決定した後に急きょ変更があったところがあり、わからなくなってしまいこちらに戻ってきた次第です。 http://okwave.jp/qa/q8743521.html にて質問をさせていただきました内容について、以下のVBAで解決できております。 しかし、抽出したファイル名にハイパーリンクが欲しいという要望を受けてしまいました。 ハイパーリンクのVBAについていろいろ調べましたが、この記述方法に追加して実行する方法が全く分かりませんでした。 お分かりになる方がいましたら、この内容にハイパーリンクをつける方法をお教えいただけますでしょうか。よろしくお願いいたします。 Sub Macro1() Dim i As Long Dim myPath As String, Flnm As String ReDim Flnmfp(0) As String Dim WS1 As worksheet Set WS1=ThisWorkbook.sheets("sheet1") myPath="望みのフォルダパスを入力" Call fpFileName(myPath, Flnmfp ) 'フォルダ内のファイル名取得 If Ubound(Flnmfp)=0 Then 'フォルダにファイルが無ければ終了 Exit Sub End if For i =1 to Ubound(Flnmfp) Workbooks.open filename := Flnmfp(i) Flnm=Dir(Flnmfp(i)) With Workbooks(Flnm).sheets("sheet1") WS1.Cells(2, i).value=.Range("G5").value WS1.Cells(3, i).value=.Range("G6").value WS1.Cells(4, i).value=.Range("K7").value WS1.Cells(5, i).value=CStr(.Range("G9").value) & CStr(.Range("N9").value) & CStr(.Range("P9").value) '同じ要領で望みのセルを記入する WS1.Cells(8, i).value=Flnm End with Workbooks(Flnm).close Savechanges:=False Next i End Sub Sub fpFileName(ByVal myPath As String, ByRef Flnmfp() As String) 'サブフォルダも含め全部のxlsファイル名をフルパスで取得する   Dim cnt As Long, buf As String, f As Object   buf = Dir(myPath & "\*.xls")   Do While buf <> ""     cnt = Ubound(Flnmfp) + 1 ReDim Preserve Flnmfp(cnt)     Flnmfp(cnt)= myPath & "\" & buf     buf = Dir()   Loop   With CreateObject("Scripting.FileSystemObject")     For Each f In .GetFolder(myPath).SubFolders       Call fpFileName(f.Path, Flnmfp)     Next f   End With End Sub

  • Exelマクロで指定フォルダ内の中身を

    Exel VBA 初心者です。 指定したフォルダに入っているフォルダの名前を、Exelマクロで書き出すようにしたいのですが、 どうしたらいいでしょうか。 マイドキュメント\業務ファイル この「業務ファイル」というフォルダの中身を整理するために、 フォルダ名の一覧をExelのシートに書き出したいのです。 以前、指定フォルダ内のファイル名を書き出すマクロを作ったことがあります。 これを改造すればできますか? このマクロでは、B1セルにパスを入れるようにしてあります。 ―――――――――――――――――――――――― Sub ファイル名一覧作成() Dim フォルダ As String Dim ファイル名 As String Dim 行 As Long フォルダ = Cells(1, 2).Value & "\" ファイル名 = Dir(フォルダ & "*.*") Cells(4, 1).Value = ファイル名 行 = 4 Do Until ファイル名 = "" Cells(行, 1).Value = ファイル名 行 = 行 + 1 ファイル名 = Dir() Loop End Sub ―――――――――――――――――――――――― 環境:WindowsXP、Exel2003

  • 【VBA】 ファイル名の取得

    23歳OLです。 会社でマクロを組んでいるのですが、 できないところがあったのでご相談させてください。 ▼やりたいこと ================================================ ・フォルダを自分で指定して、選択したファイルの名前をシートに書き込む 1.txt 2.log 3.xls とフォルダに入っていたら 1.txt 2.log 3.xls とシートに名前を書き込んでほしいです。 ・ファイルの種類はいろいろある。(txt.logなど) ================================================ ▼現在書いてみたコード ======================== Sub Sample1() Dim buf As String, cnt As Long Const Path As String = "" buf = Dir(Path & "*.*") Do While buf <> "" cnt = cnt + 1 Cells(cnt, 1) = buf buf = Dir() Loop End Sub ======================== これだと、初めから指定したフォルダしか取得することができないらしいです。 そもそもConst Path As String = "このぶぶん" このぶぶんにフォルダを指定しても動きませんでした。? どこが原因なのでしょうか? ご教示お願いします。

  • エクセルのマクロを利用したワードの開き方

    エクセルのマクロを利用したワードの開き方を教えてください。よろしくおねがいします。ちなみにコードは Option Explicit Dim 行, ドライブ, 親フォルダ, 子フォルダ, ファイル名, 拡張子, パス Dim フルパス As String Dim ワード As Object Dim ワード文書 As Object Sub 環境リストボックスでクリックされた() 行 = Worksheets("呼出").Cells(2, 1) + 1 管理表シートから値を取り出す 選択されたファイルを開く End Sub Private Sub 管理表シートから値を取り出す() ドライブ = Worksheets("管理表").Cells(行, 2) 親フォルダ = Worksheets("管理表").Cells(行, 3) 子フォルダ = Worksheets("管理表").Cells(行, 4) ファイル名 = Worksheets("管理表").Cells(行, 5) 拡張子 = Worksheets("管理表").Cells(行, 6) End Sub Private Sub 選択されたファイルを開く() ChDrive ドライブ パス = ドライブ & "\" & 親フォルダ & "\" & 子フォルダ ChDir "C:\ときめき\環境" If 拡張子 = "xls" Then Workbooks.Open Filename:=ファイル名 & ".xls", ReadOnly:=True ElseIf 拡張子 = "doc" Then フルパス = パス & "\" & ファイル名 & ".doc" 'フルパスを作成 Set ワード = CreateObject("Word.Application") 'Wordを起動する ワード.Visible = True 'Wordを表示する Set ワード文書 = ワード.documents.Open(フルパス) 'Word文書を開く End If End Sub となっています。 あと、OSはwindowsMeで ソフトはエクセル、ワード共に2000を利用しています。 よろしくおねがいします。

  • Excel VBA インデックスが有効範囲にない

      よろしくお願いします。 Excel VBA 初心のものです。 プログラムを作ってみたのですが、 「インデックスが有効範囲にありません」となってその先に進めません。 ソースですが ------------------------------------------------------ Private Sub CommandButton1_Click() Dim buf As String, cnt As Long Dim TMP As Variant Const Path As String = "D:\Excel\sample\" buf = Dir(Path & "*.xls*") Set TMP = Workbooks(buf).Sheets("testdata").Range("A1").Value Do While buf <> "" cnt = cnt + 1 Cells(cnt, 1) = buf Cells(cnt, 2) = FileDateTime(Path & buf) Cells(cnt, 3) = TMP buf = Dir() Loop End Sub ------------------------------------------------------ エラーになる箇所は Set TMP = Workbooks(buf).Sheets("testdata").Range("A1").Value のところです。 このプログラムで何をしたいかと言いますと DドライブのExcel>sample というフォルダの中にある ・すべてのエクセルブック名(ファイル数は3個)と、 ・そのブックの作成日時と、 ・testdataというシート(各ブックに必ずあるシートです)のセルA1に入っている値 を実行ファイルのSheet1に書き出す、 というものです。 プログラムの実行ファイルはExcelフォルダ直下にあります。 どこが問題でエラーになっているのか分かりません。 ご指南よろしくお願いします。   

  • エクセルマクロでファイル名のみ(拡張子無し)格納

    下記の様なマクロが有りますが、ここでファイル名のみ(拡張子無し)を fairumeiに格納したいのですがどの様なコードを書いた方が良いのでしょうか。? (ファイル名の長さは全部違います、エクセル2000) どうか、宜しくお願いします。 Sub シート検索版() Dim myPName As String myPName = Application.GetOpenFilename("測定データ(*.xls;*.csv),*.xls;*.csv") If myPName = "False" Then Exit Sub Dim wb_New As Workbook Set wb_New = Workbooks.Add Dim myKAKUCHOSI As String Dim myPATHNAME As String Dim myLName As String Dim fairumei As String Dim wb As Workbook On Error GoTo mfinish fairumei = ここが分からない myPATHNAME = CurDir myLName = Dir(myPATHNAME & "\" & "*" & myKAKUCHOSI) 'パス及びファイル名拡張子付き

  • フォルダ内の対象となるデータ名の個数

    フォルダ内にある任意のデータ名の個数を数える エクセルのマクロを使って作成したいと思っています 任意のデータ名はA1セルに入力されている名前を使おうと思っています 以下にワイルドカードを使った場合のコードを貼っておきます。 Sub Sample2() Dim FolderPath As String Dim FileName As String Dim FileInt As Long Dim SetPath As String FolderPath = "C:\Users\ユーザ名\Desktop\データ" 'フォルダのパスを指定する FileName = "*.xlsm" 'ファイル名をワイルドカードと拡張を指定する FileInt = 0 'ファイル数を一度0にする '指定したフォルダパスとファイル名をセットする SetPath = Dir(FolderPath & "\" & FileName) Do While SetPath <> "" 'ファイル名が取得出来なくなるまでループ FileInt = FileInt + 1 SetPath = Dir() Loop MsgBox FileInt End Sub

  • VBAでのORの使い方

    以下のようなVBAがあります。指定したフォルダーに保存されているエクセルのファイル名を取得するものです。 ここでやりたいのは、AとJPから始まるファイルを取得したいのですがうまくいきません。これですのコンパイルエラーが出ます。 どう変更すべきかご教示願います。 Sub ファイル名取得() Const SEARCH_DIR As String = "\\SOGKF01.JP.TakataCorp.com\XXXXXXXX\YYYYY" Const SEARCH_FILE As String = "AS*.xlsm" Or Const SEARCH_FILE As String = "JP*.xlsm" Dim tmpFile As String Dim strCmd As String Dim buf() As Byte Dim FileList() As String Dim myArray() As String Dim cnt As Long, pt As Long, i As Long 続く

  • Excel 2010 VBA:ファイル名を読み込む

    下は複数のcsvファイルを一つに合体するVBAです。これにシートの右端に読み取ったファイル名を追加するにはどうしたらよいでしょうか。 よろしくお願いします。 Sub macro1() Dim myPath As String Dim myFile As String Dim s As String myPath = ThisWorkbook.Path & "\" On Error Resume Next Kill myPath & "合体版.csv" On Error GoTo 0 myFile = Dir(myPath & "*.csv") If myFile = "" Then Exit Sub Open myPath & "合体版.csv" For Output As #1 Do Until myFile = "" Open myPath & myFile For Input As #2 Do Until EOF(2) Line Input #2, s Print #1, s Loop Close #2 myFile = Dir() Loop Close #1 End Sub

専門家に質問してみよう