- ベストアンサー
Excel VBAのハイパーリンク付文書を分別振分保存する方法
- Excel VBAを使用してハイパーリンク付きの文書を分別振分保存する方法について教えてください。
- 具体的には、Sheets("TEST")のE列に1~8の数字があり、その数字に基づいてC列とD列のハイパーリンク付き文書をE列に保存したいです。
- 保存先のフォルダは、1の場合は"1.管理a"、2の場合は"2.管理b"といったように、数字に対応する管理フォルダに保存したいです。変更するための方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>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
その他の回答 (1)
- end-u
- ベストアンサー率79% (496/625)
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
お礼
お世話になっております。 Select Case ステートメントの例, 有難うございました。 ".xlsx", ".docx"のことも 恐らく,考えなくてはいけない状況になるだろうなと 思っていましたので,とても勉強になりました。 この度もお世話になりました。 本当に助かりました。有難うございました。m(_ _)m
お礼
お世話になっております。(毎回) この度もご回答を有難うございました。m(_ _)m >全部のフォルダに保存されてしまいます。 それで困っていました。 (配列を使うとこまでは考えてたのですが,難しくて・・・。) >x = .Range("E" & h.Range.Row).Value この部分がしたいことでしたが,わかりませんでした。 再度トライしてみます。 来週,締め切りか補足をさせてください。(作成し直しますので。) どうも有難うございました。
補足
有難うございました。”キモの部分”を参考にさせていただいて バッチリ!動くようになりました。(^^) 作成したいものは前々回,前回とお力添えいただきまして 無事完成していたのですが, 案件として ・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