[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『A列をクリックすると「B列」と「指定文字」が含まれたファイルを開く方法』(ケニヤ)
すみません。業務効率化のために教えてください。
A列空欄、B列「文字列」が並んでいるシートがありまして、 A列をダブルクリックすると、同行のB列の「文字列(例:3938A)」と 不変の「指定文字列(例:2018_)」がファイル名に含まれるファイルを、 「指定フォルダ(例:C:\ABC)から探して開く方法を御教授願えませんか。
途中と最後にB列が空欄のセルもありますので、 当該空欄セルと同行ののA列をクリックしても何も開かない仕様が尚有り難いです。
不躾ですみません。 こんなことできたら有り難いということで質問とさせてください。
よろしくお願いいたします。
< 使用 Excel:Excel2013、使用 OS:Windows7 >
(γ) 2018/06/05(火) 06:55
>不躾ですみません。
そう思うなら、全部を一度に聞くのではなく、
順を追って基礎から学びたいと思いませんか?
誰かに書いてもらって、
「できた」って一人で喜んでいるだけでは、
マクロを作れるようにはならないと思いますよ。
まずは作業の流れをイメージしてください。
1)マクロ起動(ダブルクリックで起動)
→ダブルクリックされたセルが変数に渡される(以降Targetとする)
2)もし、TargetがA列で無かったらマクロ終了
3)もし、Targetの右隣りが空白ならマクロ終了
(もしかしてこの行は要らないかも?セルが空白ならファイルの存在確認で蹴られるはずだから。)
4)ファイルのプルパスを示す文字列を生成
5)生成した文字列のファイルが存在するか確認してなかったらマクロ終了
6)生成した文字列のファイルを開く
7)マクロ終了
となると思います。
で、この流れの中でどこまでは書けるという説明をし、
どこが上手く書けないかを説明して、
アドバイスを求めてはいかがでしょうか?
(まっつわん) 2018/06/05(火) 08:23
直接の回答ではないですが・・
該当ファイルは指定フォルダの直下にありますか? それともさらにサブフォルダがありますか?
対象ファイルの拡張子は何ですか? (ろっくん) 2018/06/05(火) 08:36
みなさん、御返信有難う御座います。昨日夜は失礼致しました。 休憩時間が取れましたので、過去ログやGoogle検索で悩みながら以下の様に作ってみました。
課題は、
・E列の空白セルをダブルクリックすると全てのファイルが開いてしまうこと ・E列に「家事支援」と入力した場合、「家事支援_2017」が含まれているファイルを開きたいところ、 「家事支援ABC_2017」も対象となってしまうこと
です。あとは素人作成なので、何かしたら変な動作をするのではないかという不安でしょうか・・・。
上記、課題について御支援頂ければ助かります。 宜しく御願い致します。
--------- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const TargetPath As String = "C:\ABC"
Dim FSO As Object Dim F As Object Dim myStr1 As String Dim myStr2 As String
If Target.Row >= 3 And Target.Row <= 502 Then
myStr1 = Range("E" & Target.Row).Value myStr2 = "_2017"
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each F In FSO.GetFolder(TargetPath).Files If InStr(F.Name, myStr1) * InStr(F.Name, myStr2) Then CreateObject("Shell.Application").ShellExecute F End If Next F End If End Sub
(ケニヤ) 2018/06/05(火) 21:33
(γ) 2018/06/05(火) 21:58
Const sPath As String = "C:\ABC\xxxxx_2017.xlsx" Dim myPath As String Dim wb As Workbook
If Target.CountLarge > 1 Then Exit Sub If Intersect(Me.Range("A3:A502"), Target) Is Nothing Then Exit Sub
myPath = Replace(sPath, "xxxxx", Target.Offset(, 4).Value)
On Error Resume Next Set wb = Workbooks.Open(myPath) On Error GoTo 0
If wb Is Nothing Then MsgBox "ファイルが存在しません。" End If End Sub
すごい乱暴ですが、
「開く命令をとりあえず出してみて、無かったらエラーだろ?」
という考え方が出来ます。まぁDir関数とかFSOとかで真面目にチェックするのもあり?
「ファイル 存在確認 VBA」で検索したらいいかと。。。
あ、もしかしてエクセルファイルじゃないものを開くのかな???
そうなら、その辺は調べてみてください。
>何かしたら変な動作をするのではないかという不安でしょうか・・・。
この辺は頭でっかちになるより、経験で覚えればいいのではないでしょうか?
人間、どんなことをしでかすか想像がつきません。
(まっつわん) 2018/06/05(火) 22:27
γさん、もう少しヒントをください。できればヒントを基に調べられる程度の具体的な説明が有り難い。 まっつわんさん、エクセル以外も開きます。その辺を調べられないので相談しているんですが・・・。 (ケニヤ) 2018/06/05(火) 22:32
>その辺を調べられないので相談しているんですが・・・。
ん?出来てると思ったけど?
エクセル VBA 他のソフトのファイルを開く
で調べたらでるけど。。。?
https://tonari-it.com/excel-vba-open-file-shell-application/#toc6
ファイル 存在確認 VBA
http://officetanaka.net/excel/vba/file/file06.htm
(まっつわん) 2018/06/05(火) 22:54
ちょっと修正してみましたけど、どんな展開になりますか?
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const TargetPath As String = "C:\ABC"
Dim FSO As Object Dim F As Object Dim myStr1 As String Dim myStr2 As String Dim myStr3 As String
If Target.Row >= 3 And Target.Row <= 502 Then Cancel = True
myStr1 = Range("E" & Target.Row).Value If myStr1 = "" Then Exit Sub Else
myStr2 = "_2017" myStr3 = myStr1 & myStr2
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each F In FSO.GetFolder(TargetPath).Files If InStr(F.Name, myStr3) Then If InStr(UCase(F.Name), ".XLS") Then CreateObject("Shell.Application").ShellExecute F End If End If Next F End If End If End Sub
(半平太) 2018/06/05(火) 23:22
半平太さん、勉強させて頂きました。 頂戴したコードと自分のコードを比較して、一部修正したところ上手く参りました。 異なる箇所の幾つかと Cancel = True の意味合いが分からないところですが、 これは少しずつ調べてみたいと思っております。 あらためて有難う御座います。 (ケニヤ) 2018/06/06(水) 22:22
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.