• ベストアンサー

Excelでのマクロ化

 Excel(2000)の表のB列に2000.doc~順にファイル名(全て数字+拡張子)が入っています。それにリンクを貼っていきたいのですが、マクロで自動化するにはどのようにすれば良いのでしょうか?また、拡張子がdocで存在しないものには、代わりにtxtのものを貼りたいのですが。どちらも同じフォルダにありますし、docもtxtもあるものもありますが、docもしくは、txtは必ず存在します。  ちなみに、今までは、手で1つづつハイパーリンクで貼っていたのですが、先日より1日に5~10ファイルづつ増えてくるようになったので困っています。  また、このようなマクロの参考書で、これが良いよというものを紹介していただけるとありがたいのですが。もちろん、HPのURLでも構いません。 よろしくお願いします。

  • dogs59
  • お礼率77% (279/359)

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

  • ベストアンサー
  • yoshisuke
  • ベストアンサー率65% (19/29)
回答No.1

私の環境はExcel97なので動くかどうかわかりませんが こんなマクロでできました。 ご参考までに。。。 Option Explicit Sub makeLink() '//変数宣言   Dim objFileSystem As Object 'ファイルシステムオブジェクト   Dim objDir As Object 'ディレクトリ   Dim objFilecol As Object 'ファイルコレクション   Dim objFile As Object 'ファイルオブジェクト   Const strTargetDir As String = "D:\Data" '対象フォルダ名   Dim intLine As Integer 'リンク作成行   Dim strFileName As String 'ファイル名 '//シートクリア   Cells.ClearContents '//フォルダにあるファイル情報を取得   Set objFileSystem = CreateObject("Scripting.FileSystemObject")   Set objDir = objFileSystem.GetFolder(strTargetDir)   Set objFilecol = objDir.Files '//リンクを作成   intLine = 1   For Each objFile In objFilecol     strFileName = objFile.Name     If Right(strFileName, 3) = "doc" Or _         Right(strFileName, 3) = "txt" Then       ActiveSheet.Hyperlinks.Add anchor:=Cells(intLine, 1), _        Address:=strTargetDir & "\" & strFileName       intLine = intLine + 1     End If   Next End Sub

dogs59
質問者

補足

 早速有難うございました。  すみませんが、質問内容に不備があり、もう一度質問させていただきます。その際には、またよろしくお願いします。

その他の回答 (1)

noname#102878
noname#102878
回答No.2

・Excelのセルに書かれているWordファイル名と同じWordファイル、または同名のTextファイルがExcelファイルが存在するフォルダ内にある。 ・Wordファイルが存在しなくても、同名のTextファイルが存在するかもしれない。 ・両方ともない場合も考えられなくはない。 ・Wordファイルが存在すればWordファイルにリンクを張る。 ・Wordファイルが存在しなければTextファイルを探し、存在すればTextファイルにリンクを張る。 ・どちらも存在しなければリンクを張らない。 という条件で作成してみました。 毎回一度リンクを解除しますので、WordファイルとTextファイル両方が存在しなければリンク解除のままです。 以下を標準モジュールに貼り付けて使ってみてください。 Sub SetHyperLink()  Dim fso As Object  Dim lngLast As Long ' 最終行番号  Dim i As Long  Dim strCellFName As String ' セルに書きこまれているWordファイル名  Set fso = CreateObject("Scripting.FileSystemObject")  lngLast = Range("B65536").End(xlUp).Row ' 最終行番号を取得  For i = 1 To lngLast   Cells(i, 2).Hyperlinks.Delete ' 既存のハイパーリンクを削除   strCellFName = Cells(i, 2).Value ' Cellに書かれたWordファイル名を取得   If fso.FileExists(ThisWorkbook.Path & "\" & strCellFName) = True Then    ' Cellに書かれているWordファイルが存在したので、Wordファイルにリンクを張る    Cells(i, 2).Hyperlinks.Add anchor:=Cells(i, 2), _                   Address:=strCellFName   ElseIf fso.FileExists(ThisWorkbook.Path & "\" & fso.GetBaseName(strCellFName) & ".txt") = True Then    ' Cellに書かれているWordファイルは存在しなかったが、    ' 同じ名前のTextファイルが存在したので、Textファイルにリンクを張る    Cells(i, 2).Hyperlinks.Add anchor:=Cells(i, 2), _                  Address:=fso.GetBaseName(strCellFName) & ".txt"   End If  Next i  Set fso = Nothing End Sub

dogs59
質問者

補足

早速有難うございました。  すみませんが、質問内容に不備があり、もう一度質問させていただきます。その際には、またよろしくお願いします。

関連するQ&A

  • Excelでのマクロ化

     先ほど質問したのですが、質問内容に不備があり、回答いただいたものでは対応が出来ませんでした(私の知識不足で改良できないもので)ので、再度質問させて下さい。  Excel(2000)の表のc列に2000~順にファイル名?(全て半角数字)が入っています。それに対応するファイル(SG2000~SG+数字になっています)をハイパーリンクで引いてきたいのですが、マクロで自動化するにはどのようにすれば良いのでしょうか?  リンクしたいファイルは、別のネットワークディレクトリに入っています。ファイルは、拡張子がdocもしくは、txtですが、両方あるものについてはdocを。docがないものについては、txtのものを貼りたいのです。どちらもないものはありませんので、そこで終了としたいのです。  どちらが簡単かわかりませんが、ハイパーリンクを貼らなくても、c列のセルをクリックしたら、対応ファイルが開くというものでも構いません。  このファイルのディレクトリがちょこちょこ移される(ファイル数が多くなると空きの多いドライブに移されます)と今後、doc,txt以外のファイルも必要となる可能性があるので、そのときに対応できるように、どこを書き換えたら良いのかもあわせて教えていただけると助かるのですが。  ちなみに、今までは、手で1つづつハイパーリンクで貼っていたのですが、先日より1日に5~10ファイルづつ増えてくるようになったので困っています。  また、このようなマクロの参考書で、これが良いよというものを紹介していただけるとありがたいのですが。もちろん、HPのURLでも構いません。 よろしくお願いします。

  • エクセル2003でのハイパーリンク

    ファイル名の一覧で、フォルダ(実際のファイルの在るフォルダ、5個在ります)へのハイパーリンクをまとめて付けたいのです。以前、ファイル名毎にフォルダへのリンクを付けていた時は、問題無かったのですが、うっかりハイパーリンクの列を消してしまいました。フォルダ名は表に残っていますので、フォルダ名順に並び替え、一つハイパーリンクを付け、同フォルダのものに、それをコピーしました。その後ファイル名で並び替えると、ハイパーリンク出来ません。 ハイパーリンクを示す、手の表示が出ないものや、ハイパーリンク先が変わる行は出来ますが、同じリンク名が続くと出来ないようです。 よろしくお願いいたします。

  • ハイパーリンク設定をマクロに記録したい(エクセル2000)

    フォルダ内のファイルの一覧をエクセルで作り、目次のようにハイパーリンクでジャンプするようにします。1フォルダ、1シートとします。 エクセルの文字列を選択して、ハイパーリンク設定画面で、リンク先のフォルダを指定するところまでをマクロに記録し、ショートカットキーに登録して作業を早くしたいのです。 ところが、リンク設定が完了するまでマクロ記録の終了ができません。フォルダ指定までのマクロでないと他の文字列に使えません。 リンク設定の途中でマクロ記録を終了する方法はないでしょうか?

  • excel マクロコードを教えていただきたいです

    マクロを使うのが初心者のため、詳しい方に以下のマクロ コードを教えていただきたいです。 ある表の一番右の列にハイパーリンクが並んでいます。 そのハイパーリンクにて、各Bookファイルが開くのですが ハイパーリンクを一回押すことで、その一行(数セル)を、 開いた別ファイルのsheet内に貼り付けたいです。 今は方法がわからないため、ハイパーリンクにてファイル だけ開き、表の一行をコピーして、そのファイル内に貼り 付けています。 すみませんがわかる方教えていただきたいです。よろしく お願いします。

  • エクセルのマクロ

    エクセルのマクロ(VBA?)で、あるフォルダ内のファイル名を取得する(拡張子が.txtのもだけ)関数があれば教えてほしいのですが・・・

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

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

  • エクセルVBAハイパーリンクの自動設定について

    はじめて質問させていただきます。 エクセルVBAハイパーリンクの自動設定についてですが A列にAAA、BBB、CCC、DDD・・・という文字列が入っています。 D:\dataというフォルダーにAAA-01、BBB-02、CCC-01、DDD-05 という名前のファイル(.DOC)が入っています。 A列の文字列にハイパーリンクを貼りたいのですがどうしたらよいでしょうか? AAAの文字にAAA-01.docのハイパーリンクを自動で貼る。 -01はファイルのバージョンで更新されたら-02、-03と変わって いくため頭から3文字があえばリンクを貼るようにしたいのです。 よろしくお願いします。

  • エクセルのマクロ

    A列にアルファベット、B列からE列まで数字が入力されている表があります。 A1から順に(A1→A2→A3→・・・)、A列の文字を調べてそれが"A"であった場合のみ、同じ行のB列からE列の最大値をF列に、最小値をG列にコピーする(A列の文字が"A"以外の場合は何もせず下の行を調べる)、ということを繰り返し、A列が空白になった時その作業を中止する、というマクロを作りたいのです。 もちろん、一つの表だけならA列で並べ替えをして関数を使えば簡単にできますが、表がたくさんあるので自動化したいと思います。 マクロに関してはまったくの初心者なので、お知恵をお借りできればうれしく思います。

  • Excelマクロ テキスト貼り付け

    テキストファイル(*.txt)を開き、A1に貼り付けるマクロを教えてください。 B列には計算式があるため、A列にテキストの内容を貼り付けたいです。 また、テキストのファイル名はランダムなため、 フォルダを開いて、テキストを開きたいのですが教えてください。

  • エクセル:マクロを使ったリネーム

    お世話になります。 下記の内容をエクセルのマクロでできるでしょうか? あるフォルダ(ここでは例としてAフォルダとする)のなかに複数のフォルダがはいっています。これらのフォルダ名は実際はかなり長いのですが、必ず5桁の数字+アンダーバーではじまります。 (例:00123_●●●) この各フォルダにはいくつかのファイルが入っていて、拡張子がxmlのファイルが必ず1つ入っています。この拡張子がxmlのファイル名の先頭にフォルダの5桁の数字+アンダーバーをつけた名前にリネームしたいのです。 例:abcde.xml でフォルダ名が00123_●●●の場合  → 00123_abcde.xml にする。 そしてリネームしたxmlファイルをAフォルダ直下に移動させたい。 事情がありリネームソフト等は使えません。 マクロを記述したエクセルファイルをAフォルダ直下に入れて動作させるものとします。 エクセル2003です。 よろしくお願いします。

専門家に質問してみよう