• ベストアンサー

私には複雑すぎて困っています_Excel2000VBA

私には複雑すぎて困っています_Excel2000VBA 26行目以下のC列とD列に,ハイパーリンクの貼ってある文書があります。(文字列の文書名にURLが貼ってあるもの) (1)B25でオートフィルタを実施。 (2)指定された保存場所(D10セル値取得)にファイル名を少し変更( _を付加しC3セル値取得)して,各文書を保存。 ******************************************************************************* ここまでの内容を前回こちらに初めて投稿し,ご教示いただいて動作するようになりました。(前回投稿;http://okwave.jp/qa/q6003799.html) 今回,困っていることですが, この一連の処理で保存した文書(オートフィルタで選択された文書)のC列,D列のハイパーリンクアドレスの表示を処理後のアドレスに変更したいのです。 処理前:http://ABC/D/EF/GHI/JKL/文書あ.xls 処理後:\\aaa\bb\ccc\dd\eee\文書あ_なまえ.xls 処理前の「http://ABC/D/EF/GHI/JKL/」部分は「文書い」や「文書え」のケースなど,文書によってURLが異なっています。(固定ではありません。) 処理後の「\\aaa\bb\ccc\dd\eee\」部分はD10セル値,「_なまえ」部分はC3セル値を取得しているので固定ではありません。 調べてみると固定のケースは多くありましたが,今回のようなケースが見つかりませんでした。今回のケースの場合,処理したURLと置換え後のURLを別シートへ書き出し,それを元の場所へ戻す(上書する)みたいなことをしなければならないのでしょうか? 前回ご教示いただいた下記コードを利用しての良い方法があれば・・・と思っています。どうぞ宜しくお願い致します。 Sub try()  省略。(前回投稿;http://okwave.jp/qa/q6003799.htmlのベストアンサーと同じです。) UserForm1.Show vbModeless UserForm1.Repaint 'ここから時間のかかる処理 'Dim Cnt As Long '■※1)画面更新停止 Application.ScreenUpdating = False 'rng.HyperlinksをLoop For Each H In Rng.Hyperlinks 'Excelファイルの処理 If UCase(Right$(H.Address, 3)) = "XLS" Then H.Follow NewWindow:=False With ActiveWorkbook BookName = BookUrl & Replace$(.Name, ".xls", n & ".xls", , , vbTextCompare) '■※2)既存ファイルあれば削除しておく If Len(Dir(BookName)) > 0 Then Kill BookName .SaveAs Filename:=BookName .Close ここに,あるコードを入れて試したところ,動きましたが,指定したコードがシート全体のハイパーリンクを指定したため全て同じURL表示となってしまいました。(あたりまえですが・・・) 「上記の処理の完了した文書のみ」という指定はできるのでしょうか? End With End If Next Unload UserForm1 '■※1)画面更新再開 Application.ScreenUpdating = True Set Rng = Nothing Dim myR2 myR2 = MsgBox("ご指定の場所へ保存しました。ご確認ください。", vbOKOnly, "ファイルの作成の完了") End Sub どうぞ宜しくお願い致します。m(_ _)m

この投稿のマルチメディアは削除されているためご覧いただけません。

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

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

落ち着いて考えてみてください。 1)H.Follow NewWindow:=False でハイパーリンク先を開きます。 2)BookName = BookUrl & Replace$(.Name, ".xls", n & ".xls", , , vbTextCompare) ここでD10セルとC3セルを使った新しいファイル名の文字列を設定して 3).SaveAs Filename:=BookName 新しいファイル名で保存しています。 つまり変数BookNameが置換え後のファイル.FullNameです。 これをハイパーリンク先に変更すれば良いですね。 For Each H In Rng.Hyperlinks でHyperlinkをLoopして処理してますから H がそのHyperlinkです。 この.AddressプロパティとH.Rangeの.Valueプロパティを変更すれば良いです。

shiku_nan
質問者

お礼

end-u 様 こんにちは。 先日は,大変御世話になりました。(有難うございました。) 今回も,ご回答をいただきまして有難うございます。 (御連絡が今日になり,申し訳ありません。) ご回答内容で1)~3)は理解していましたので置換え動作はできました。 だだ,一番始めの変更後のURLが全ての行のURL変更になってしまって困っていました。↓そのコードです。(これでは当たり前の結果ですが。) >For Each H In Rng.Hyperlinks でHyperlinkをLoopして処理してますから >H がそのHyperlinkです。 >この.AddressプロパティとH.Rangeの.Valueプロパティを変更すれば良いです。 この部分をどう指定したら良いのかわからずにいました。 H.Address=BookName で動作できました。有難うございました。 本題から少し離れてしまいますが,1つお聞きしても良いでしょうか? こちらのファイル,URLの文書を開いて保存となっているせいか, 画面制御していても左上に「保存中にでるメッセージが瞬間で出ます」←文字は読み取れないほど速く動作しています。 これを無くすには,「文書を開かなくても保存」にすればいいのかな?と安易に考えていますが,できるものでしょうか?

その他の回答 (3)

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

Sub testの   hLink = Selection.Hyperlinks(1).Address   MsgBox "確認用" & vbLf & hLink ここのhLink、つまりSelection.Hyperlinks(1).Addressでは何が取得できましたか? ダウンロードしたいxlsファイルのURLアドレスのはずです。 補足コードの >hLink = Rng.Address ←変更後 >'MsgBox "確認用" & vbLf & hLink←B25:C301と指定して出てくれました。 これは意図したものと違いますよね。 Loop対象範囲のセルアドレスそのものを取得したいわけではなく Loop対象範囲にあるHyperlink個々に設定されたURLアドレスが必要なわけです。 Sub testはサンプルとして単独セルのHyperlinkについて処理しています。 これをLoop処理内に組み込まないといけません。 Sub tryの :  'rng.HyperlinksをLoop  For Each H In Rng.Hyperlinks   'Excelファイルの処理   If UCase(Right$(H.Address, 3)) = "XLS" Then : ここでLoop処理してます。 Sub testでの Selection.Hyperlinks(1) はこの H に当たります。 だから Selection.Hyperlinks(1).Address は H.Address 。 :  For Each H In Rng.Hyperlinks   hLink = H.Address   'MsgBox "確認用" & vbLf & hLink   If UCase(Right$(hLink, 3)) = "XLS" Then :

shiku_nan
質問者

お礼

ご回答と解説文を有難うございました。 理解できました。 今回いただいた内容と前回のコードを参考に URLDownloadToFile関数との絡みも含めて 後半部分,試行錯誤してみます。(基礎学習の継続優先に・・・) 前回「URLDownloadToFile関数」をとりあえず忘れてくださいと おっしゃった意味が分かります。 この度も大変御世話になりました。 本当に本当に有難うございました。m(_ _)m

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

サンプルコードです。該当シートで Hyperlink設定されたセルを選択して実行。 Sub test()   Dim BookUrl As String   Dim BookName As String   Dim n    As String   Dim hLink  As String   Dim xName  As String   Dim v   If Selection.Hyperlinks.Count = 0 Then Exit Sub   hLink = Selection.Hyperlinks(1).Address   MsgBox "確認用" & vbLf & hLink      With Sheets("sheet1")     BookUrl = .Range("D10").Value     n = "_" & .Range("C3").Value   End With      If UCase(Right$(hLink, 3)) = "XLS" Then     xName = Mid$(hLink, InStrRev(hLink, "/") + 1)     'v = Split(hLink, "/")     'xName = v(UBound(v))     MsgBox "確認用" & vbLf & xName     BookName = BookUrl & Replace$( _       xName, ".xls", n & ".xls", , , vbTextCompare)     MsgBox "結果" & vbLf & hLink & vbLf & BookName   End If End Sub URLDownloadToFile関数についての参考サイト。 http://www.ken3.org/backno/backno_vba25.html キャッシュを読み込んでしまう場合、下記の後半箇所を参考にしてください。 http://www.f3.dion.ne.jp/~element/msaccess/AcTipsMSHTML.html Win32APIのDeleteUrlCacheEntry関数も必要な状況かもしれません。 以下余談。 ことExcelVBAに関しては 1)「新しいマクロの記録」の活用 2)VisualBasicEditor、調べたい語句にマウスキャレットあてて[F1]キーでのHELPクイックアクセス 3)VBE[F8]キーでのステップ実行 4)VBE[Alt][v][s]の[ローカルウィンドウ]で変数調査 5)google検索 あとは「時間」と、労を厭わない「やる気」、があれば大抵の事は自力解決できるはず。 ...って思ってます。 いろいろと試行錯誤しながら自分でやってみる事が大事。 それではこのへんで :D

shiku_nan
質問者

お礼

こんにちは。 本スレッド外の質問になってしまったのにも関わらず, ご回答をいただきまして有難うございました。(サンプルコード,有難うございます。) 本日,午前中に色々と試してみました。 「URLDownloadToFile関数」は宣言部分からひっかかってしまったのでもう少し時間をかけて取組んでいきたいと思います。 余談4)は,はじめて知りました。(有難うございます。)便利ですね。これも「基礎」なんですよね。(・・・お恥ずかしい。) 今回のサンプルコードと前回スレッドのご回答いただいたコードを参考に >If UCase(Right$(hLink, 3)) = "XLS" Then の上記部分までの動きを確認し,1箇所変更しました。 この1箇所の変更について補足欄に記載しました。 間違っていないかみていただきたいのですが・・・。御手隙の時がございましたら,どうぞ宜しくお願い致します。

shiku_nan
質問者

補足

こんには。サンプルコードから・・・ 該当シートの中にHyperlink設定されたセル(列)がC,D列以外にもあるため, 前回スレッドでいただいた内容を利用して With Sheets("TEST") 'AutoFilterModeでなければ抜ける If Not .AutoFilterMode Then Exit Sub 'B25FilterModeでなければ抜ける If Not .FilterMode Then MsgBox "B25のオートフィルタボタンを実行してください" Exit Sub End If 'とりあえずAutoFilter.RangeのC:D列をセット Set Rng = Intersect(.AutoFilter.Range.EntireRow, .Columns("C:D")) 'hLink = Selection.Hyperlinks(1).Address ←ここの部分かえました。 hLink = Rng.Address ←変更後 'MsgBox "確認用" & vbLf & hLink←B25:C301と指定して出てくれました。 BookUrl = .Range("D10").Value n = "_" & .Range("C3").Value End With 'rngの可視セル(抽出セル)をセット Set Rng = Intersect(Rng, Rng.Offset(1), Rng.SpecialCells(xlCellTypeVisible)) '抽出なければ抜ける If Rng Is Nothing Then Exit Sub としました。 VBE[F8]キーでのステップ実行で >If UCase(Right$(hLink, 3)) = "XLS" Then 以降は, MsgBox "確認用" & vbLf & xName や  MsgBox "結果" & vbLf & hLink & vbLf & BookName は表示されずに 「End If」 までカーソルが移動されました。 そのため,心配になったのは上記の一行分変更したためにメッセージの表示がされなくなったのかな?ということです。 URLDownloadToFile関数との絡みもあるので他の問題は試行錯誤してみます。 上記の件のみご回答いただけたら助かります。どうぞ宜しくお願い致します。

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

前スレッドで >...とりあえずURLDownloadToFile関数の事は忘れてください。 って書いてますので忘れてもらえたのだとは思いますが、 ファイルを開かなくてもダウンロードはできます。 ただ前回のアドバイスの流れとして意図していたのは、 まず基本を押さえて、それから自分の理解できる範囲で応用・工夫されていけばいいんじゃないか、 という事です。 やりたい事は実現可能でしょうけど、自分のスキルに合わせて使わないと、何かあった時のメンテナンスにも困ります。 まして他のユーザーに提供するわけですから、自分でサポートできるものを提供されたほうが良いと思います。 出来る事からやってください。 時には妥協も必要です。 他にも方法はあるかと思いますが、 URLDownloadToFile関数を使う場合の手順としては、 ・HyperlinkのAddressに設定されたファイルのフルパスを取得。 ・フルパスからxlsBook名だけを抜き出す。 ・Book名に保存先フォルダ文字列を結合して、ダウンロード元AddressとともにURLDownloadToFile関数の引数として渡す。 といった感じです。 抜き出すにはパスの区切り文字"/"に着目して、Split関数とUbound関数、 またはInStrRev関数とMid関数などを使う事になります。 まずはそれらの関数について知るところから始めないといけませんね。 がんばってください。

shiku_nan
質問者

お礼

End-_u 様 ご回答を有難うございました。(具体的な関数を教えていただけて助かります。) 画面の「左上に保存中にでるメッセージが瞬間で出る」のは,使用者側からみて,気になるところなので提出期限までに何れ解消したいと思っていますが,現在の私の力ではできないので基礎の勉強をこのまま進めたいと思います。 >時には妥協も必要です。 私も妥協したいのですが,立場上できないのです。(なので,こちらに投稿してご回答をいただけるのはとても助かっています。(最後の砦となっているので。) 5月からVBAを学びはじめた状態なので,本当にこの数ヶ月つらかったです。 今はEnd_u様のご回答を参考に,コードの解読や学び方を進めていけるので気持ち的に少し楽になりました。ファイルの方も思ったように動くことで楽しさも感じることができました。きちんと書ければ,便利で楽しいものなのだな,と。 (ただ,1文字でも間違うとエラーが出るので「奥が深過ぎる」と日々感じていますが。) 「ファイルを開いて保存」はしたかった動作ではありませんでした。 ただ,WEB上から見つけて「使える」と思い,設定したのです。「メンテナンス面を考える」。今なら理解できます。 もしお手数でなければ,コードではなく, 「RLDownloadToFile関数を使う場合」のキーワードでまだ必要なもの(関数など)がありましたら,教えて頂けないでしょうか? >・HyperlinkのAddressに設定されたファイルのフルパスを取得。 出来そうかここが微妙です。 >・フルパスからxlsBook名だけを抜き出す。 なんとかなりそうです。前回のスレッド回答を参考にして。 >・Book名に保存先フォルダ文字列を結合して、ダウンロード元AddressとともにURLDownloadToFile 関数の引数として渡す。 D10の値+Book名をしてから,ダウンロード元Addressが固定ではないので「区切り文字"/"に着目して前の部分を抜取る」で考え方は合っていますでしょうか? お礼欄ですのに,ご質問をして申し訳ありません。 学ぶ範囲が広いため,関数などは,できれば必要なものから手をつけて行きたいと思いました。どうぞ宜しくお願い致します。

関連するQ&A

  • Excel_エラー9_インデックスが有効範囲に・

    Excel_VBA_ver2000_エラー9_インデックスが有効範囲にありませんが出てしまいます。 何度かお世話になっております。(前回http://okwave.jp/qa/q6283060.html)コードが長いため所々省略しています。 下記←部分にエラ-9が出てしまいます。選択文書数を少なくするとエラーはでません。何故でしょうか?文書は現在300ぐらいです。(今後増えます。)テストで20程選択し,実行すると何もエラーはでませんでした。どうぞ宜しくお願い致します。 Sub try() Dim BookUrl, BookName, n, hLink, xName, Holdir, X, chk, returnValue, BookUrl2, n2 As String Dim Rng, sel As Range Dim kk(1 To 8) As String Dim H As Hyperlink Dim v, myR2, myR3, SAN, Result, nn, SAN2 As Variant ~省略~ 'とりあえずAutoFilter.RangeのC:D列をセット Set Rng = Intersect(.AutoFilter.Range.EntireRow, .Columns("C:D")) BookUrl = .Range("D10").Value n = "_" & .Range("C3").Value ~省略~ SAN = BookUrl & "総合管理" & n & ".xls " If Dir(SAN) <> "" Then MsgBox "既にご指定場所に,同名ファイルがあるようです。" & vbCrLf & "ご確認の上,フォルダ,ファイルを削除してから再操作をして下さい。" & vbCrLf & "動作を抜けます。" Exit Sub End If ~省略~’ここに7.資料\1.管理a ~8管理hを作成するコードを入れています 'rngの可視セル(抽出セル)をセット Set Rng = Intersect(Rng, Rng.Offset(1), Rng.SpecialCells(xlCellTypeVisible)) '抽出なければ抜ける If Rng Is Nothing Then Exit Sub UserForm1.Show vbModeless UserForm1.Repaint '■※1)画面更新停止 Application.ScreenUpdating = False 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 ThisWorkbook.Sheets("TEST") Set Rng = .Columns("C:D") Set Rng = Rng.SpecialCells(xlCellTypeVisible) 'rng.HyperlinksをLoop 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("F" & H.Range.Row).Value ※ H.Range.Row=192 関係ありますか? Holdir = "7.資料\" & kk(X) & "\" ← エラー9_インデックスが有効範囲にありません。 BookName = BookUrl & Holdir & Replace$( _ xName, chk, n & chk, , , vbTextCompare) 'URLDownloadToFile API をコールする returnValue = URLDownloadToFile(0, hLink, BookName, 0, 0) H.Address = BookName End Select Next End With Unload UserForm1 '■※1)画面更新再開 ~省略~

  • EXCEL VBA複数のハイパーリンク付き文書を保存について

    EXCEL VBA複数のハイパーリンク付き文書を保存について 検索が下手なのか,参考となる情報がなかなか見つからなかったため,初めて投稿しました。 EXCEL VBAは超初心者です。Verは2000になります。どうぞ,宜しくお願いします。 下記のような動作はできますでしょうか?(超初心者のため,できるのかどうかも分かりません。) データの状態は,TESTというファイル名でSheet1のみ使用しており,1行目~24行目は操作上のセル参照などや操作説明文に使用しています。 B25にオートフィルタ▼マークがあり,以下B26からB300ぐらいまで「レ」が入っています。(これは今後増えていきます。)また,C列D列はハイパーリンク付き文書(**.xlsと**.html)があります。 (ユーザにC列D列を見て必要ない文書はB列の「レ」を削除後,B25のオートフィルタ▼を実行してもらう。この後の動作をVBAで行いたいと思っています。) 行いたいこと) (1)選ばれたC列D列のハイパーリンク付き文書(全て)をD10で指定された場所へ保存する  補足)D10はユーザによって指定する場所が違う。(マイドキュメントとは限らない。) Sub Macro5() Dim sPath As String Dim hwnd As Long Dim iRet As Long hwnd = FindWindow("XLMAIN", vbNullString) iRet = GetFolderName(hwnd, "フォルダを選択してください。", sPath) If iRet = 0 Then If Len(sPath) > 3 Then sPath = sPath & "\" Cells(10, 4).Value = sPath ElseIf iRet = 1 Then MsgBox "キャンセルされました。" Else MsgBox "エラーが発生しました。" End If End Sub Web上で調べた上記コードを引用させていただいて,ユーザごとに希望保存場所が違うため,別ウィンドウからユーザに保存場所を指定してもらい,D10の値を参照するようにしました。 (2)(1)の時ファイル名を一部変更し保存する。(http://AAA.co.jp/BB/CC/DD/EE/○○-○○.xls → D10の値参照\○○-○○_C3の値参照.xls)○○-○○の部分を選ぶようにしたい。 補足)ファイル名は同じではない。 Sub Macro6() Dim BookUrl As String Dim BookName As String BookUrl = Range("D10").Value BookName = Range("C3").Value Range("C28").Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True←ここの部分がハイパーリンクと関係ありなのでわからない。(ユーザにより選ばれる文書数が違いので) ActiveWorkbook.SaveAs Filename:= _ "" & BookUrl & "00-00" & "_" & BookName & ".xls" ←ここの「00-00」の部分がハイパーリンクと関係ありなのでわからない。(各階層各文書名が違うので) ActiveWindow.Close End Sub 分からないこと) ユーザによって選ばれる文書(抽出結果)が違うため,B列でレが選ばれた場合C列D列を見る。→その文書をD10セルで指定されている場所へ保存としたいが,C列D列の文書にハイパーリンクが貼ってあり,その階層もファイル名も行ごとに違うのでどうしたらいいかわからない。現在,1文書ならば行もファイル名も指定できるのでマクロの実行で保存し,上記コードでD10セルに指定されている場所へ保存できている。 分からないこと)をまとめると, 「ユーザごとに選ばれるハイパーリンク付き文書が違うが,これをD10で指定した場所へ保存したい」 「選ばれたハイパーリンク付き文書のハイパーリングからファイル名を変更して保存する際,「○○-○○」.xls部分のみ引用したい。この部分のみまだクリアーしていません。どうもハイパーリンクが絡むと分からなくなってしまいます。 質問の書き方も長々となってしまい,分かり辛いと思います。すみません。 どうぞ宜しくお願い致します。m(_ _)m

  • Excel のVBAに付いて教えて下さい。

    前回、質問しました内容が関連してくるんですが 参考に下記のURLを ご覧になって下さい。 http://okwave.jp/qa/q7472816.html 前回の内容ですと、指定した列を月で指定してComboboxで選択していました。 その指定した列に特定の文字数を入力すると言う動作を作成しました。 特定の文字数を入力すると言う内容ですが、現時点では指定した列に上から下に 順序に入力して行くように作成してます。 そのコードが”Set myRng = Range(rng).End(xlUp).Offset(1)”です。 今回は、Comboboxで指定した列の2つ隣の列に日付が入力されています。 2つ隣と言うのは、左に向かって2つ隣です。 例えばC列を指定したとすればA列を表します。 実際に行いたいことは、指定した列の日付の入った行を検索し、指定した日付の所に 文字数を入力したいと考えています。 Userformを使って入力しているんですが、Combobox1が月の列を選択していますので、 新たにCombobox2を作りCombobox2で指定した日付(行)を選択し入力できる様に作成 したいのですが・・・今、使っているコードを基にCommandbox2を追加して作成できますでしょうか? 現在のコードは下記です。 Private Sub UserForm_Initialize() Dim i As Long For i = 1 To 12 Me.ComboBox1.AddItem i & "月" Next End Sub Private Sub CommandButton1_Click() Dim myRng As Range Dim rng As String Select Case ComboBox1.Value Case "1月": rng = "az76" Case "2月": rng = "be76" Case "3月": rng = "bj76" Case "4月": rng = "ak41" Case "5月": rng = "ap41" Case "6月": rng = "au41" Case "7月": rng = "az41" Case "8月": rng = "be41" Case "9月": rng = "bj41" Case "10月": rng = "ak76" Case "11月": rng = "ap76" Case "12月": rng = "au76" Case Else: Exit Sub End Select Set myRng = Range(rng).End(xlUp).Offset(1) myRng.Value = TextBox1.Value End Sub

  • Excel VBA_2000ハイパーリンク付文書を選択後,各フォルダへ

    Excel VBA_2000ハイパーリンク付文書を選択後,各フォルダへ分別振分保存について (http://okwave.jp/qa/q6003799.html) (http://okwave.jp/qa/q6058720.html)で大変お世話になった者です。Sheets("TEST")E列に1~8の数字あります。これを判断して実行時に,C・D列のハイパーリンク付文書をE列に1とあれば1.管理aフォルダに保存,以下,2の時は2.管理bへ保存としたいのです。どのように変更すれば良いでしょうか?どうぞ宜しくお願い致します。 Sub try() Dim BookUrl As String Dim BookName As String Dim n As String Dim Rng As Range Dim H As Hyperlink Dim hLink As String Dim xName As String Dim Holdir As String Dim kk() As String Dim i As Integer Dim returnValue As String ActiveSheet.Unprotect With Sheets("TEST") If Not .AutoFilterMode Then Exit Sub If Not .FilterMode Then MsgBox "B25のオートフィルタボタンからレ点を選択してください。" Exit Sub End If Set Rng = Intersect(.AutoFilter.Range.EntireRow, .Columns("C:D")) BookUrl = .Range("D10").Value n = "_" & .Range("C3").Value End With With Sheets("TEST") ActiveSheet.Shapes("Button 36").Select On Error Resume Next MkDir Range("D10") & "7.資料" MkDir Range("D10") & "7.資料" & "\" & "1.管理a" MkDir Range("D10") & "7.資料" & "\" & "2.管理b " MkDir Range("D10") & "7.資料" & "\" & "3.管理c" MkDir Range("D10") & "7.資料" & "\" & "4.管理d" MkDir Range("D10") & "7.資料" & "\" & "5.管理e" MkDir Range("D10") & "7.資料" & "\" & "6.管理f" MkDir Range("D10") & "7.資料" & "\" & "7.管理g" MkDir Range("D10") & "7.資料" & "\" & "8.管理h" On Error GoTo 0 End With Set Rng = Intersect(Rng, Rng.Offset(1), Rng.SpecialCells(xlCellTypeVisible)) If Rng Is Nothing Then Exit Sub UserForm1.Show vbModeless UserForm1.Repaint '■※1)画面更新停止 Application.ScreenUpdating = False 'rng.HyperlinksをLoop For Each H In Rng.Hyperlinks hLink = H.Address If UCase(Right$(hLink, 3)) = "XLS" Then xName = Mid$(hLink, InStrRev(hLink, "/") + 1) ReDim kk(8) kk(0) = "1.管理a" kk(1) = "2.管理b" kk(2) = "3.管理c" kk(3) = "4.管理d" kk(4) = "5.管理e" kk(5) = "6.管理f" kk(6) = "7.管理g" kk(7) = "8.管理h" For i = 0 To 7 Holdir = "7.資料" & "\" & kk(i) & "\" BookName = BookUrl & Holdir & Replace$( _ xName, ".xls", n & ".xls", , , vbTextCompare) returnValue = URLDownloadToFile(0,hLink,BookName,0,0) H.Address = BookName Next i End If 以下,省略

  • ExcelのVBAなんですが・・・教えて下さい。

    Userformを使って自分で作成しましたカレンダー(予定表)に文字数を入力しようとしています。 Userformには、Comboboxを使って指定の月を選択し、 予定表の月の列に文字数を入力したいと考えています。 自分なりに考えて作成してみたんですが・・・どうしても上手くいきません。 お手数をおかけしますが、教えて頂けますか? 下記のコードを作成しましたが、どこをどの様にしたら、きちんとした動作ができますでしょうか? Private Sub UserForm_Initialize() With ComboBox1 .AddItem "1月" .AddItem "2月" .AddItem "3月" .AddItem "4月" .AddItem "5月" .AddItem "6月" .AddItem "7月" .AddItem "8月" .AddItem "9月" .AddItem "10月" .AddItem "11月" .AddItem "12月" End With End Sub Private Sub CommandButton1_Click() Dim s As Long Dim rng Select Case ComboBox1.Value Case "1月": rng = "az46" Case "2月": rng = "be46" Case "3月": rng = "bj46" Case "4月": rng = "ak11" Case "5月": rng = "ap11" Case "6月": rng = "au11" Case "7月": rng = "az11" Case "8月": rng = "be11" Case "9月": rng = "bj11" Case "10月": rng = "ak46" Case "11月": rng = "ap11" Case "12月": rng = "au11" Case Else: Exit Sub End Select s = Range(rng, Rows.Count).End(xlDown).Row Range(rng & s + 1).Value = TextBox1.Value End Sub 初心者の為、すいませんが宜しくお願いします。

  • エクセル・ハイパーリンクの関数処理

    エクセル・ハイパーリンクの関数処理 Excel 2007を使っています。 セルC列にハイパーリンクを含むデータが並んでいます。 このURLをD列に取り出したいのですが、 関数処理で出来ますか。出来るのでしたら教えてください。 出来ない場合は、マクロでも結構です。お願いします。

  • Excel2007の条件付き書式をVBAで行う方法

    Excel2007での条件付き書式をVBAで行う方法を教えてください。 【やりたいこと】 E列に「あ」と入力されると、A列からE列までのフォントが青、セルの塗りつぶしが黒になる E列に「い」と入力されると、A列からE列までのフォントが黒、セルの塗りつぶしが白になる E列に「あ」「い」以外が入力された場合は何もしない。 #A列からD列まではすでに別の文字列が入力されています。 【使いたい構文】 イベントプロシージャ(Change)を使いたい。 Select Caseを使いたい。 【願わくば・・・】 色の指定をRGBですることもできるのでしょうか? 過去の質問より、塗りつぶしを変更する方法や、 フォントの色を変更する方法は見つかりましたが、 両方を変える方法を見つけることができませんでした。 Select Caseの処理を複数させようとして挫折しています。 そもそも一度に複数処理をさせることは無理なのでしょうか? よろしくお願いします。

  • [VBA]型が一致しません

    EXCELWORKSHEET上で下記の処理をすると「型が一致しません」との エラーがでます。どうにも原因と対応策がわからず悩んでいます。 デバッグの良い方法ありませんでしょうか? <現象> *列2上のセルを選択して、DELETEキーを押す。⇒エラーなし。 *しかし、列2上のセルとその他のセルを同時選択した上で、DELETEキーを押すと「型が一致しません。」のエラー。 頭の「If Target.Column Like 2 And Len(Target.Value) > 0 Then 」が悪さしているのはわかるのですが・・・。 Private Sub WORKSHEET_CHANGE(ByVal Target As Range) If Target.Column Like 2 And Len(Target.Value) > 0 Then Range("c" & Target.Row).Value = Now If Target.Column Like 2 And Len(Target.Value) > 0 Then 'B列の場合だけ確認 Dim rng As Range Set rng = ActiveSheet.Range("B:B").Find(What:=Target, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True, MatchByte:=True) If Not rng Is Nothing Then '発見した。 If rng.Address <> Target.Address Then '入力中セル以外で発見 Select Case MsgBox("過去に受け入れたLOTです。再度受入れますか?", vbYesNo) Case vbYes Range("B2").Activate Selection.End(xlDown).Select ActiveCell.Offset(0, 1).Activate ActiveCell.Value = Now ActiveCell.Offset(0, 1).Activate ActiveCell.Value = UserForm2.TextBox2.Value UserForm2.TextBox1.Value = "" UserForm2.TextBox2.Value = "" UserForm2.TextBox1.SetFocus Range("B2").Activate Selection.End(xlDown).Select Selection.Offset(1, 0).Select Case vbNo Range("B2").Activate Selection.End(xlDown).Select ActiveCell.ClearContents ActiveCell.Offset(0, 1).Activate ActiveCell.ClearContents UserForm2.TextBox1.Value = "" UserForm2.TextBox2.Value = "" UserForm2.TextBox1.SetFocus End Select End If End If End If End If End Sub

  • 行選択した文書のみダウンロード_チェックボックス

    いつも大変お世話になっております。 以前http://okwave.jp/qa/q6003799.html、こちらでお世話になり、m(_ _)m 当時完成させたものに対して「いくつかの」仕様変更を求められました。 ここ数カ月程、ずっと挑戦しては悩んでおります。 期限が迫ってきましたので今回投稿しました。 「過去に何かを作成したことはなく、現在のものをいきなり実践で作成という経緯」なので、 一からcodeを入力する技量は全くありません。 以前ご回答いただいたものを「いじり」ながら変更を行っています。 Windows7 Excel2010になります。 別カテゴリで2週間以上回答がつきませんでした。再投稿になります。 どうぞ宜しくお願い致します。 <以前は> 一括文書のダウンロード (1)B列に「レ」を入力 (2)オートフィルタを実施 (3)(1)、(2)で選んだ行のC、D列のリンク文書のみ指定場所に一括ダウンロード (4)その際に複数フォルダ作成を行い、その中へダウンロードする各ファイルを指定したファイル名へ変更してから保存 (5)ダウンロードした場所のリンク先にC、D列のハイパーリンク先を変更 <今回は> グループごとに文書 ダウンロード   例)第一グループにある資料=「ファイルの保存1」ボタンを実行 (1)B列にチェックボックスを作成 (2)(1)でチェックボックスがONとなっているC、D列のリンク文書のみ指定場所にダウンロード (3)指定したフォルダ名でフォルダを作成し、その中へ(2)を指定したファイル名へ変更し保存 (4)ダウンロードした場所のリンク先にC、D列のハイパーリンク先を変更 (5)第二グループからはAB列とAC列の数字を比較して、違う場合はAC列の数字のフォルダ(グループ)内へ戻り検索、該当文書のショートカットキ-を作成してAB列の数字のフォルダ(グループ)の中へ保存 <現在の状態> <今回は>の(1)(3)(4)ができていて,(2)ができていません。(指定フォルダ名の作成はできていていますが,指定した範囲の全ての文書が保存されてしまいます。)チェックボックスがONとなっている行のC,D列のリンク文書のみ指定場所にダウンロードを行いたいのです。(5)の動作についてもかなり苦戦しているため切羽詰っている状態です。アドバイスいただけると大変助かります。 ※チェックボックスはフォームコントロールで作成したチェックボックスです。  フォーム上には作成しておらずシート上に作成しています。  コントロールの書式設定にリンクするセルにはチェックボックスのすぐ下のセル「例)$34$」などとして,TRUE/FALSEを表示させています。  このTRUEの数を拾えるところまではできましたが,下記「ku」で拾えたTEUEの数をどう生かせばいいのかわかりません。 Sub try2() CreateObject("WScript.Shell").CurrentDirectory = ThisWorkbook.Path Dim BookName, BookName2, n, f, hLink, xName, xName2,NNN, Holdir, X, chk, returnValue As String Dim Rng As Range Dim H As Hyperlink Dim hd1 As String Dim FSO As Object Dim ku As Long ActiveSheet.Unprotect With ThisWorkbook.Sheets("参考資料") ActiveSheet.Shapes("Button5").Select ActiveSheet.Range("$B$34:$B$40").AutoFilter Field:=1 Set Rng = Intersect(.AutoFilter.Range.EntireRow, .Range("B34").CurrentRegion) n = "_" & .Range("C3").Value f = .Range("C5").Value 'ChDrive ThisWorkbook.Path 'ドライブ移動 ChDir ThisWorkbook.Path 'エクセルファイルのある場所に移動する Set FSO = CreateObject("Scripting.FileSystemObject") If FSO.FolderExists(ThisWorkbook.Path & "\" & "1.第一") Then MsgBox "既にご指定場所に,同名フォルダがあるようです。" & vbCrLf & "ご確認の上,再操作をして下さい。" & vbCrLf & "動作を抜けます。" Exit Sub Else MkDir ThisWorkbook.Path & "\" & "1.第一" End If Set FSO = Nothing End With Set Rng = Intersect(Rng, Rng.Offset(1), Rng.SpecialCells(xlCellTypeVisible)) '抽出なければ抜ける If Rng Is Nothing Then Exit Sub 'UserForm1.Repaint '■※1)画面更新停止 Application.ScreenUpdating = False hd1 = "1.第一" With ThisWorkbook.Sheets("参考資料") ActiveSheet.Range("$B$34:$B$40").AutoFilter Field:=1 Set Rng = Intersect(.AutoFilter.Range.EntireRow, .Range("B34").CurrentRegion) ku = WorksheetFunction.CountIf(Range("B34:B40"), "TRUE") ←ここのkuの結果(チェックボックスの結果がTRUEだった行)のみ以下の動作(ファイルのダウンロード)を行いたい 'rng.HyperlinksをLoop For Each H In Rng.Hyperlinks hLink = H.Address chk = LCase(Mid$(hLink, InStrRev(hLink, "."))) Select Case chk Case ".xls", ".xlsx", ".doc", ".docx", ".pdf" xName = Mid$(hLink, InStrRev(hLink, "/") + 1) NNN = ThisWorkbook.Sheets("参考資料").Range("AA" & H.Range.Row).Value X = ThisWorkbook.Sheets("参考資料").Range("AB" & H.Range.Row).Value xName2 = NNN & chk Holdir = "\" & hd1 & "\" BookName = ThisWorkbook.Path & "\" & Holdir & Replace$( _ xName2, chk, n & "_" & f & chk, , , vbTextCompare) BookName2 = hd1 & "\" & NNN & n & "_" & f & chk 'URLDownloadToFile API をコールする returnValue = URLDownloadToFile(0, hLink, BookName, 0, 0) H.Address = BookName2 ActiveSheet.Range("$B$34:$B$40").AutoFilter Field:=1 End Select Next End With 'Unload UserForm1 '■※1)画面更新再開 Application.ScreenUpdating = True End Sub かなりの説明下手ですので画像をご覧いただけたら・・・と思います。 大変申し訳ありませんが、 皆様、どうぞ宜しくお願い致します。

  • vbaでのハイパーリンク

    G1セルにURLが入力されており、そのURLをハイパーリンクにしたいです。下のG2からずっとURLが入っており同じ処理を記入がなくなるまで繰り返し行いたいです。どのような式で行えるでしょうか?なかなかうまくいかずお力添えいただきたいです。

専門家に質問してみよう