- ベストアンサー
Excelでのマクロ化
先ほど質問したのですが、質問内容に不備があり、回答いただいたものでは対応が出来ませんでした(私の知識不足で改良できないもので)ので、再度質問させて下さい。 Excel(2000)の表のc列に2000~順にファイル名?(全て半角数字)が入っています。それに対応するファイル(SG2000~SG+数字になっています)をハイパーリンクで引いてきたいのですが、マクロで自動化するにはどのようにすれば良いのでしょうか? リンクしたいファイルは、別のネットワークディレクトリに入っています。ファイルは、拡張子がdocもしくは、txtですが、両方あるものについてはdocを。docがないものについては、txtのものを貼りたいのです。どちらもないものはありませんので、そこで終了としたいのです。 どちらが簡単かわかりませんが、ハイパーリンクを貼らなくても、c列のセルをクリックしたら、対応ファイルが開くというものでも構いません。 このファイルのディレクトリがちょこちょこ移される(ファイル数が多くなると空きの多いドライブに移されます)と今後、doc,txt以外のファイルも必要となる可能性があるので、そのときに対応できるように、どこを書き換えたら良いのかもあわせて教えていただけると助かるのですが。 ちなみに、今までは、手で1つづつハイパーリンクで貼っていたのですが、先日より1日に5~10ファイルづつ増えてくるようになったので困っています。 また、このようなマクロの参考書で、これが良いよというものを紹介していただけるとありがたいのですが。もちろん、HPのURLでも構いません。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
うちで実験してみたら、下記で動きました。 使い方は、該当シートをアクティブにして マクロを実行するだけです。 file_type(*)の設定を追加するなり 変更するなりしてもらえれば、 doc、txt以外にも対応可能です。 Sub AutoAnchor() Dim file_dir As String Dim y As Integer Dim i As Integer Dim ck As String Dim file_type(10) As String 'ファイル置き場(ネットワーク上なら、\\PC名\共有名) file_dir = "c:\test" 'セルのスタート位置の行番号 y = 1 'ファイルの拡張子(優先する物ほど上へ) file_type(0) = ".doc" file_type(1) = ".txt" file_type(2) = "" Do Until Cells(y, 3).Value = "" i = 0 Do Until file_type(i) = "" ck = Dir(file_dir & "\" & Cells(y, 3).Value & file_type(i)) If ck <> "" Then Exit Do i = i + 1 Loop ActiveSheet.Hyperlinks.Add Anchor:=Cells(y, 3), Address:= file_dir & "\" & Cells(y, 3).Value & file_type(i) y = y + 1 Loop End Sub
その他の回答 (2)
- moon00
- ベストアンサー率44% (315/712)
セル内容は数字のみで、ファイル名には必ず「SG」がつく、 ということならば、 ck = Dir(file_dir & "\" & "SG"&Cells(y, 3).Value & file_type(i)) ActiveSheet.Hyperlinks.Add Anchor:=Cells(y, 3), Address:= file_dir & "\" & "SG"& Cells(y, 3).Value & file_type(i) とすれば大丈夫だと思います。Excel97で確認しました。 それぞれファイル名を取得するときに、「SG」を付け加えています。 私も1年ほど前からマクロに手を出し始めましたが、 http://www.moug.net/ http://www.sigoto.co.jp/excel/ http://www2s.biglobe.ne.jp/~iryo/index.html このあたりが参考になるかと。 これらのHPからリンクを貼られているところも参考になります。 その他は日経パソコンの連載を参考にしてます。
お礼
有難うございました。助かりました。 お2人に、良回答をお付けしたいのですが、システム上無理なので、申し訳ありません次点とさせていただきます。 今後ともよろしくお願いします。 紹介いただいたURLは、すぐに参考にさせていただきます。
- mousengoke
- ベストアンサー率50% (197/388)
>ところで、このマクロどこで、c列を判断しているのでしょうか? プログラムの中の Cells(y, 3) の3です。 Cellsの中の左側が行番号右側が列番号を示すのです。 これは僕もやってしまうんですがマジックナンバーといってあまり好ましくないものですね。 この場合例えば最初に Const linkretsu = 3 と宣言しておいて Cells(y, 3) を Cells(y, linkretsu) としておいたほうがいいんですね。 そうすれば何かの理由でD列に変えたいとき Const linkretsu = 3 を Const linkretsu = 4 に直せばいいことになるんですね。
お礼
有難うございました。 またまた、私の質問ミスです。 セルの内容は、2000とか2020なのですが、ハイパーリンクするファイル名は、SG2000やSG2020でした。 教えていただいたマクロで、2000や2020というファイルを捜してハイパーリンクを貼り付けようとしていますね。 これ以上は、個人的な質問になるので、控えた方が良いのでしょうか?基礎がわからないための失敗です。もし、時間があったら申し訳ないのですが、教えてください。
お礼
ありがとうございました。 質問しておきながらなんですが、用事があって帰宅したので、明日試してみます。 ところで、このマクロどこで、c列を判断しているのでしょうか?