下記URLの質問と回答を参考にマクロを組もうとしています。
https://oshiete.goo.ne.jp/qa/2966602.html
具体的には
2枚目のシートのC列に入力されている文字(4文字の数字です)に
指定フォルダに入っている先頭4文字が一致するファイルをハイパーリンクする
といった処理を行おうとしています。
Sub AAA()
Dim i As Integer, N As Integer, TargetFile As String
i = 1
Do While Cells(i, 3) <> ""
N = 0
TargetFile = Dir$("指定フォルダアドレス\*.xlsm")
Do While TargetFile <> ""
If Left(TargetFile, 4) = Cells(i, 3) Then
ActiveSheet.Hyperlinks.Add Anchor:=Range(Cells(i, 3).Address), _
Address:="指定フォルダアドレス" & TargetFile
GoTo Nxt
End If
TargetFile = Dir$
Loop
Nxt: i = i + 1
Loop
End Sub
実行をするとエラーが出ることもなくうんともすんともいいません。
間違いの指摘やアドバイスなどいただけますと幸いです。
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
こんにちは。
私のセキュリティの場合、ハイパーリンク設定はあっても、メッセージが出て、開かないので、一応、その話は置いておきます。誰もおなじだと思っていたからです。
◎先頭の4文字の一致でリンクを貼る様にしたい場合どのようにしたらよろしいでしょうか?
>C列が111となり、ファイル名が 『111 名前 所属.xlsm』の場合リンクが貼られずうんともすんとも言わない、といった状況です。
この場合は、先頭の4文字は、一意でおなじものがないという条件ですね。つまりインデックスというわけです。
>If Left(TargetFile, 4) = Cells(i, 3) Then
それで、元のコードでは、こうなっていたわけですね。(この場合の文字比較は、ちょっと難しいです。)
私のコードは、ひとつ変えれば済むだけです。
私の考え方は、[111 名前 所属.xlsm]というファイル名のあるファイルを探して、あるか・ないか、というのが、目的となっていますから、
'//以下、2行の書き換えで済むはずです。
fn = Trim(Left$(Cells(i, 3).Value, 4)) '①
TargetFile = Dir$(指定フォルダ & fn & "*.xlsm", vbNormal)
'//
".xlsm" → "*.xlsm" と、アスタリスクを入れてください。 (.xlsx, .xlsm, .xls を探すなら、[xls?] です。)
それと、念の為に、Trim 関数を用いました。
>C列の数字が68となっている場合、②のファイルを認識してリンクをはるということが可能なのでしょうか?
'①で、先頭の数字を探すというとこですね。それを間違えてしまうと、探しだせません。つまり、C列は、数字のみが入っているという条件ですね。
でしたら、問題はありません、数字にダブりがないことが条件です。
それと、余計な心配ですが、見つからなかった場合の記録を残すなら、以下のような方法でも可能です。
If TargetFile <> "" Then (ファイルが見つかった場合)
Else
''見つからなかった場合は、
Debug.Print fn
fn=""
End If
>手動でファイル名とC列の数字に0を足すなどして対応しようと思います。
>(5⇒0005)のように
ゼロパディングですね。これ自体、マクロでも可能です。
手順は、手動でやるのと同じことですが、VBAマクロなら早いというだけです。
ただ、タイム・スタンプをそのままに残すというと、ちょっとややこしいような気がしました。これも可能だと思います。
それにしても、私も、これを手本にして、ファイルの整理をしようかと思うようになりました。いつも、月末にファイルを探していますからね。(^^;
更なるご回答ありがとうございます。
結論から申し上げますと、ご教授いただいたもので
思うような処理を行うことができました!
土台となる知識がまだまだ備わっていないにも関わらず
丁寧にご指導くださいましてまことにありがとうございました。
見つからなかった場合の処理までもご指導頂き何から何までありがとうございます。
実際のところ、まだ回答の5割ほどしか理解してないかと思いますので
今後知識と理解を深め、自らのスキルとして生かせるよう精進したく思います。
WindFallerさんのファイルの整理のきっかけになれれば幸いです。
改めて、ありがとうございました。
No.3
- 回答日時:
追伸:
今、実際のハイパーリンクを試してみましたが、これがうまくありませんね。セキュリティが働いてしまい、容易に開けようとしません。以下のようなメッセージが出てしまいます。
問題なければ、それはそれで、こちらの早合点かもしれません。
私の場合は、ハイパーリンクがないほうがよいです。
今は、ハイパーリンクがあることが条件になっていますから、右クリックにイベントを設けましたが、ハイパーリンクとは、時間的に開くのに雲泥の差があります。
当該のハイパーリンクのシートの、「シートモジュール」に、以下のようなマクロを付けてみてください。
ハイパーリンクがなければ、
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
こちらのほうがよいです。
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim fn As String
Cancel = True
If Target.Hyperlinks.Count > 0 Then
fn = Target.Hyperlinks(1).Address
If Dir(fn) <> "" Then
Workbooks.Open fn
End If
End If
End Sub
No.2
- 回答日時:
人様の作ったものの評価はしませんが、このコード、見た感じ、変だと思いましたが、こちらで作ってみました。
要するに、その名称のファイルがあるかどうかの問題ですから、考え方は逆なのです。一応、「.xlsm」は、汎用性のために「.xls?」にしましたが、問題がなければ、元に戻してください。
'//
Sub BBB()
Dim i As Integer
Dim TargetFile As String
Dim fn As String
Const 指定フォルダ = "C:\Temp\Test1\"
For i = 1 To Cells(Rows.Count, 3).End(xlUp).Row
If Cells(i, 3).Value <> "" Then
fn = Cells(i, 3).Value 'これは単なる見かけです。見難くなるのを恐れて
TargetFile = Dir$(指定フォルダ & fn & ".xls?", vbNormal)
If TargetFile <> "" Then
ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 3), _
Address:=指定フォルダ & TargetFile
End If
End If
Next i
End Sub
'//
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】読取専用のファイル...
-
EXCEL VBA 指定したファイルが...
-
エクセルマクロで不特定なファ...
-
ファイルの保存場所を変えたら...
-
データ参照先が別ファイルの場...
-
ファイルを開かずにマクロを実行
-
EXCELが終了できません
-
excel2007のファイルを一気に97...
-
【Excel VBA】ファイル名が一...
-
VBAでワークブックの名前を変数...
-
word2007ファイル起動時のSQLに...
-
VBAでフォルダ内の全てのcsv...
-
エクセルファイルをHTML化する...
-
秀丸:あらかじめ設定した複数...
-
Accessのaccdbファイルを起動で...
-
エクセルのxls形式からxlsx形式...
-
エクセルのシートの数を数えた...
-
【VBA】フォルダ内のファイル全...
-
vlookup関数の引数を変数で指定...
-
エクセル 複数ファイルの一括...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCEL VBA 指定したファイルが...
-
エクセルマクロで不特定なファ...
-
VBAでワークブックの名前を変数...
-
フォルダ内のexcelファイルを順...
-
エクセルのxls形式からxlsx形式...
-
エクセル 複数ファイルの一括...
-
エクセルのシートの数を数えた...
-
accessフォルダを移動したらフ...
-
vlookup関数の引数を変数で指定...
-
Accessのaccdbファイルを起動で...
-
ファイルを開かずにマクロを実行
-
【Excel VBA】ファイル名が一...
-
EXCELマクロを無効にして開く方法
-
エクセル(マクロ)のファイル...
-
ACCESS VBAでファイルを開くダ...
-
Excel VBA でファイルが開かれ...
-
ファイルの保存場所を変えたら...
-
vba初心者です。 質問です。 毎...
-
フォルダ内のブック全部にパス...
-
エクセルマクロ 異なるファイ...
おすすめ情報
すみません、きちんとお礼ができてませんでしたので補足にて。
まずはご回答ありがとうございます。
No.2にてご回答いただいたコードを実行したところ
ファイル名とC列の数字(ファイル名が111.xlsmでC列の文字が111となっています)が一致する場合リンクが貼られるのですが
C列が111となり、ファイル名が 『111 名前 所属.xlsm』の場合リンクが貼られずうんともすんとも言わない、といった状況です。
先頭の4文字の一致でリンクを貼る様にしたい場合どのようにしたらよろしいでしょうか?
またリンクを貼るのに成功した場合、回答者様が添付されている画像のようなメッセージボックスは発生せず、通常通り、対象のエクセルファイルを開くといった処理がされます。
重ね重ねすみません。
対象ファイルのファイル名なのですが
形式としては『数字 名前 所属 部門.xlms』となります。
各項目の間は半角スペースになっております。
数字は4文字とは限らず1~9999のどれかになります。
例として
①5 阿部 大阪 経理.xlsm
②68 伊藤 宮城 人事.xlsm
③685 宇野 沖縄 .xlsm
④6857 江川 愛媛 営業.xlsm
といった形です。
ここまで書いてふと思ったのですが、C列の数字が68となっている場合、②のファイルを認識してリンクをはるということが可能なのでしょうか?
もし難しいようでしたら、手動でファイル名とC列の数字に0を足すなどして対応しようと思います。
(5⇒0005)のように