• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBA_2000ハイパーリンク付文書を選択後,各フォルダへ)

Excel VBAのハイパーリンク付文書を分別振分保存する方法

このQ&Aのポイント
  • Excel VBAを使用してハイパーリンク付きの文書を分別振分保存する方法について教えてください。
  • 具体的には、Sheets("TEST")のE列に1~8の数字があり、その数字に基づいてC列とD列のハイパーリンク付き文書をE列に保存したいです。
  • 保存先のフォルダは、1の場合は"1.管理a"、2の場合は"2.管理b"といったように、数字に対応する管理フォルダに保存したいです。変更するための方法を教えてください。

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

>Sheets("TEST")E列に1~8の数字あります。 >これを判断して実行時に,C・D列のハイパーリンク付文書を >E列に 1とあれば1.管理aフォルダに保存, >以下,2の時は2.管理bへ保存... 現状のコードではRng.HyperlinksをLoopする時にへんな事になってます。 Loopの度に配列kk()に値をセットするのは無駄でしょう。 さらにFor i = 0 To 7...Next では全部のフォルダに保存されてしまいます。 Rng.HyperlinksをLoopする時、それぞれの h の行の、E列の値を取得して判断すれば良いです。 以下がそのキモの部分。 きちんと理解できれば自分で組み込めるはずです。 Sub test()   Dim rng    As Range   Dim h     As Hyperlink   Dim Holdir   As String   Dim kk(1 To 8) As String   Dim x   kk(1) = "1.管理a"   kk(2) = "2.管理b"   kk(3) = "3.管理c"   kk(4) = "4.管理d"   kk(5) = "5.管理e"   kk(6) = "6.管理f"   kk(7) = "7.管理g"   kk(8) = "8.管理h"      With Sheets("TEST")     Set rng = .Columns("C:D")     Set rng = rng.SpecialCells(xlCellTypeVisible)     For Each h In rng.Hyperlinks       x = .Range("E" & h.Range.Row).Value       Holdir = "7.資料\" & kk(x) & "\"       Debug.Print x, Holdir     Next   End With      Set rng = Nothing End Sub

shiku_nan
質問者

お礼

お世話になっております。(毎回) この度もご回答を有難うございました。m(_ _)m >全部のフォルダに保存されてしまいます。 それで困っていました。 (配列を使うとこまでは考えてたのですが,難しくて・・・。) >x = .Range("E" & h.Range.Row).Value この部分がしたいことでしたが,わかりませんでした。 再度トライしてみます。 来週,締め切りか補足をさせてください。(作成し直しますので。) どうも有難うございました。

shiku_nan
質問者

補足

有難うございました。”キモの部分”を参考にさせていただいて バッチリ!動くようになりました。(^^) 作成したいものは前々回,前回とお力添えいただきまして 無事完成していたのですが, 案件として ・8フォルダへの振分保存 ・word文書も保存する ことが追加となり,困っていました。 現在は 下記←行の"XLS"を”DOC”にして, 全体のExcelファイルに対する処理コードを そのままコピーしてWORDファイルも処理をさせています。 ←の部分でExcelファイルとWORDファイルを一括で対象とすることは 可能でしょうか? (andや&を使用していろいろ試してはみました。andや&ではないのでしょうか?) 現在でも動いているので, また,本スレッドとは直接は関係ないので ここで質問するのはいけないな。とは思ったのですが, xlsとdocの同時指定が結局わからないままだったので できれば知りたいと思いました。 どうぞ,宜しくお願い致します。 If UCase(Right$(hLink, 3)) = "XLS" Then ← xName = Mid$(hLink, InStrRev(hLink, "/") + 1) BookName = BookUrl & Holdir & Replace$( _ xName, ".xls", n & ".xls", , , vbTextCompare) Dim returnValue As String 'URLDownloadToFile API をコールする returnValue = URLDownloadToFile(0, hLink, BookName, 0, 0) H.Address = BookName

その他の回答 (1)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

And ではなくて Or でしょう。 実際には[Select Case ステートメント]を使うと簡潔にまとめられます。 : Dim x, chk As String '追加変数 : For Each h In rng.Hyperlinks   hLink = h.Address   chk = LCase(Mid$(hLink, InStrRev(hLink, ".")))   Select Case chk   Case ".xls", ".xlsx", ".doc", ".docx"     xName = Mid$(hLink, InStrRev(hLink, "\") + 1)     x = Range("E" & h.Range.Row).Value     Holdir = "7.資料\" & kk(x) & "\"     BookName = BookUrl & Holdir & Replace$( _           xName, chk, n & chk, , , vbTextCompare)     returnValue = URLDownloadToFile(0, hLink, BookName, 0, 0)     h.Address = BookName   End Select Next

shiku_nan
質問者

お礼

お世話になっております。 Select Case ステートメントの例, 有難うございました。 ".xlsx", ".docx"のことも 恐らく,考えなくてはいけない状況になるだろうなと 思っていましたので,とても勉強になりました。 この度もお世話になりました。 本当に助かりました。有難うございました。m(_ _)m

関連するQ&A

専門家に質問してみよう