• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フォルダー内のファイルとリンクするマクロVBA)

フォルダー内のファイルとリンクするマクロVBA

nayuta_lotの回答

  • ベストアンサー
回答No.2

こんにちは No.1です。 >これは「End Sub」の後に「Sub MakeHyLink()」でする事を分けて作成すると >言う事でしょうか? そうです。 マクロを記入したシートに続けて記載することができます。 ただし、マクロの名称は別です。 Sub MakeHyLink_Folder() ・・・フォルダにリンクを貼るマクロ。 左側のボタンに登録します。    : End Sub Sub MakeHyLink_File() ・・・ファイルにリンクを貼るマクロ。 右側のボタンに登録します。    : End Sub 上記のように、各ボタン用のマクロを作成して、それぞれのボタンにマクロを登録します。 とりあえず、フォルダにリンクを貼るマクロに絞ってマクロの勉強をされたらどうでしょうか? フォルダが開くだけでも、結構、有効ですから。 この手のマクロを組む時は、必ずループの処理が必要になります。 逆に言えば、このループで処理を自動で繰り返すことができるのがマクロのメリットですね。 For、Do While、Do Untilなど、色々あるのですが、とりあえず、Do Whileを使ったループの 処理を記載します。 Do While 条件式 ・・条件が真(条件に合う)である間、Do While と Loopの間を繰り返し              処理します。   : Loop 基本は下記のようなループ処理です。 Sub MakeHyLink10() Range("A8").Select '追加 先頭のセルを指定 Do While ActiveCell.Value <> "" 'アクティブセルがNULLでない間(何か入っている) 'DoからLoopまでの間を繰り返す。 ActiveCell.Offset(1, 0).Select '1行、下へ移動 Loop 'Do Whileへ戻る End Sub 上記のマクロをマクロシートに貼り付けて、Sub MakeHyLink_loop()の行にカーソルを持っていて F8を押してみてください。 F8を押すと、マクロがステップで実行(1行単位で実行)になり、F8を押すたびに、次の行が 実行されます。 カーソルのある場所がF8を押した時にこれから実行される命令です。 実際にエクセルのシートをみながらやると、動きが分かると思います。 ではさっそく、F8を押してみてください。 Range("A8").Select が実行されると、エクセルシートのA8が選択されますね。 カーソルはDo While ActiveCell.Value <> ""にあると思います。 次にF8を押すと、Do While ActiveCell.Value <> ""が実行されます。  Do While ActiveCell.Value <> "" は、   アクティブセルが、未入力でない間(何か入力されている)、Do と Loopの間の処理を繰り返す。  ということです。 逆の言い方をすると、   アクティブセルが、未入力な状態になるまで、Do とLoopの間の処理を繰り返す。  とも言えます。(笑) 【補足】  ActiveCell(アクティブセル)とは、範囲選択すると分かりやすいのですが、複数の範囲を  選択すると、選択された範囲の中で一つだけ、白抜きになった編集対象のセルがありますよね。  それがアクティブセルです。 なので、単独のセルしか選択していない場合は、そのセルが  そのままアクティブセルになります。  ※ActiveCell.Value ← .Valueはアクティブセルの値を意味します。  また、""とは、NULL(ヌル)と言いますが、何も入力されていない状態(未入力)です。  何も入っていないように見えても空白は文字とみなされますのでご注意ください。 もし、A8に、何か入っていれば、  ActiveCell.Offset(1, 0).Select にいきます。 ここでF8を押すと、A9にセルが動くのが確認できると思います。 次のDo While ActiveCell.Value <> ""での判定の準備です。 この処理をしないといつまでたっても、セルの位置が変わらないので永久ループに入ります(笑) 試しにこの行を、'でコメントアウトしてやってみてください。 ずっと繰り返します。 もし、ステップでない状態で実行してしまった場合には、ESCを押すと中断しますのでご安心ください。  ActiveCell.Offset(1, 0).Select ← .Offset(1, 0).Select は、アクティブセルの位置から                       1行0列移動したセルを選択しなさいという意味です。                      .Offset(1, 0)今の位置を基準にして1行0列離れたセル                      .Select 選択する 次にLoopのところでF8を押すと、Do While ActiveCell.Value <> ""に戻ります。 こうして、アクティブセルが未入力でない状態の間、セルが下にさがっていき、未入力の状態になると End Sub に移り、処理が終了します。 これが、ループの基本です。 このループに肉付けしていくと、色々できるようになります。 この処理ができるようになったら、次に進みましょう。 Dim wkStr As String 変数の定義です。 VBAでは変数の宣言をしないと、プログラムの中でその名前を使用できません。 (1)Dim 変数名 As 型 型にはいろいろあるのですが、とりあえず、 Integer ・・・ 数値を扱う場合に使用 String ・・・ 文字列を扱う場合に使用 と覚えておけば、最初は十分でしょう。 最初に宣言しておけば大丈夫です。 (2)下記の文は、ご自身で書かれたものですが、これが1回分の処理ですね。 -----ここから wkStr = ThisWorkbook.Path & "\TEST\" & ActiveCell.Value If Dir(wkStr, vbDirectory) = "" Then MsgBox "フォルダー:" & wkStr & vbLf & " を、作成します。" MkDir wkStr Else MsgBox "フォルダー:" & wkStr & vbLf & " は、存在します。" End If ActiveSheet.Hyperlinks.Add Anchor:=ActiveCell, Address:=wkStr --ここまで Sub MakeHyLink10()   ← (1)ここに変数の宣言をしておけば、基本的に大丈夫です。 Range("A8").Select '追加 先頭のセルを指定 Do While ActiveCell.Value <> "" 'アクティブセルがNULLでない間(何か入っている) 'DoからLoopまでの間を繰り返す。 ← この間に、ご自身で書かれた上記(2)を記載します。 ActiveCell.Offset(1, 0).Select '1行、下へ移動 Loop 'Do Whileへ戻る End Sub 基本的に、ループ処理を理解した上で、変数の宣言とご自身で書かれた文を上記の位置に入れて あげれば、フォルダのリンクは貼れるはずです。 F8を使って、動きを見てみるとわかりやすいですよ^^ そろそろ、残り入力文字数も少なくなってきたので、この辺で(笑) それでは、何かあれば補足してください。 がんばってください^^

noname#208471
質問者

お礼

初心者にわかりやすい様に書いて頂き有難うございます。 とても解りやすく書いて頂いているので、理解もしやすく、 ちゃくちゃくと進み完成しそうです。 まったくの素人にとても丁寧に対応して頂き本当に有難うございます。 本当に有難うございます。

関連するQ&A

  • エクセルVBAで指定場所にフォルダー作成

    エクセルのVBAマクロ機能を使い、 自動フォルダー作成&リンクするマクロを作成したのですが、 現在のマクロですと「A(仮名)」の中にフォルダーに作ってしまいますので 下記の様に階層で指定出来る様にしたいのですが、教えて頂けないでしょうか? 出来れば、そのままマクロ貼り付けで使える様にしたいので、 下記に途中までのマクロを編集して頂ければ助かります。 「A(仮名)」と言うフォルダーの中にエクセルファイルの管理表を入れ 「A」のフォルダーの中に「B(仮名)」と言うフォルダーを作り、 その中に管理台帳で自動作成されるフォルダーがつくられる様にしたい。 現在のマクロ Sub MakeHyLink() Dim wkStr As String If ActiveCell.Column <> 1 Then Exit Sub If ActiveCell.Value = "" Then MsgBox "アクティブセルは未入力、やり直し" Exit Sub End If wkStr = ThisWorkbook.path & "\" & ActiveCell.Value If Dir(wkStr, vbDirectory) = "" Then MsgBox "フォルダー:" & wkStr & vbLf & " を、作成します。" MkDir wkStr Else MsgBox "フォルダー:" & wkStr & vbLf & " は、存在します。" End If ActiveSheet.Hyperlinks.Add Anchor:=ActiveCell, Address:=wkStr End Sub

  • エクセルVBA自動ハイパーリンクフォルダー指定場所

    管理台帳を作成したく、下記のVBAを作りました。 マクロ内容は、Aセルに管理番号を入力しマクロ実行ボタンにて、 入力した番号と同じフォルダーを作成しハイパーリンクする自動フォルダー作成&ハイパーリンクマクロです。 現在のフォルダー作成場所はローカルのDドライブ直下に作る様に指定しているのですが、 エクセルVBAがある場所と同じ場所に、上記のマクロで作るフォルダーが出来る様にしたいのですが、 見よう見まねでVBAを何とか作ったのですが、知識がなくこれ以上が解りません。 出来れば、下記のVBAを編集して頂、教えて頂いたVBAをそのままコピペすれば使える状態で教えて頂ければ助かります。 宜しくお願い致します。 Sub MakeHyLink() Const path As String = "D:\" Dim wkStr As String If ActiveCell.Column = 1 Then wkStr = path & ActiveCell.Value If Dir(wkStr, vbDirectory) = vbNullString Then MsgBox wkStr & "フォルダがありません。作成します。" MkDir wkStr Else MsgBox wkStr & "フォルダは存在します。" End If ActiveSheet.Hyperlinks.Add Anchor:=ActiveCell, Address:=wkStr End If

  • フォルダー内のファイルのリンク VBA

    以前、カーソールを置いた部分のテキストとフォルダーの中にあるファイルが一致した場合、 ボタンを押す事によりハイパーリンクを付けるVBAを教えて頂き、現在も活用をさせて頂いています。 今までエクセル「E」列を対象にしていたのですが、 使用しているうちに前列に項目を入れたくなり「E」列の前に2列追加し、 対象の列が「E」列から「G」列の変更になりました。 それから新たにリンクを作成しようとしても実行出来なくなりました。 追加した前列を消しても駄目に。 素人なりに列を指定しているところを変えてみたのですが駄目でして。 If .Column <> 5 Or .Value = "" Then Exit Subを If .Column <> 7 Or .Value = "" Then Exit Subに。 列を変えた場合は、何処をどうすれば良いのでしょうか? 申し訳ありませんが、教えて頂けないでしょうか? 元のVBA Sub Test() Dim fName As String fName = ThisWorkbook.path & "\test\test-a\" With ActiveCell If .Column <> 5 Or .Value = "" Then Exit Sub fName = fName & .Offset(0, -4).MergeArea.Cells(1, 1).Value & _ "\" & .Value & ".prt" If Dir(fName) <> "" Then ActiveSheet.Hyperlinks.Add Anchor:=ActiveCell, Address:=fName End If End With End Sub

  • エクセルVBAでフォルダの作成

    こんにちは。 セルA4から下に商品番号が書いてあります。 その商品番号をダブルクリックすると、「専用のフォルダをつくりますか?」とメッセージを出して、「はい」であれば、 (1)商品番号を名前にしたフォルダを作成 (2)その商品番号のフォルダへのハイパーリンクを設定 というようにしたいと思っています。 調べ、調べ下のように書いているのですか、 (1)、(2)の肝心の部分が分かりません。 あと、A列のどんな行でもダブルクリックするとメッセージが出るので、A4以降の商品番号のある行まで、というようにできればいいとも思っています。 お教えいただけないでしょうか。宜しくお願いします。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Columns("A")) Is Nothing Then myMSG = "専用フォルダをつくりますか?" If MsgBox(myMSG, vbYesNo + vbQuestion, "フォルダ作成") = vbYes Then '以下に '(1)「倉庫」フォルダにクリックしたA列の商品番号を名前にしたフォルダ作成 '(2)つくったフォルダへのハイパーリンクを設定 End If End If End Sub

  • VBA シート名とファイル名とフォルダ名を一度に変更したい

    こんばんは。 現在のアクティブセルに入力された文字列「(例)0001」を入力するとシート名、ファイル名、フォルダ名が変更するVBAを作成しています。 シート名の変更は出来たのですが、ファイル名とフォルダ名の変更が上手くいきません。 大変恐れ入りますが、伝授いただけないでしょうか。 よろしくお願い致します。 Sub シート名変更() Dim シート名 As String シート名 = ActiveCell.Value If シート名 = "" Then MsgBox "文字列を含むセルを選択してください。" Exit Sub End If ActiveSheet.Name = シート名 End Sub

  • エクセルVBAシート分けしても他のシート反映しない

    エクセルのVBAで、エクセルのセル(A列)に「12345」と入力しカーソールを入力したセルに合わせ、 今回作成したマクロを実行すると「12345」の名前がついたフォルダーを 指定した場所に自動作成しハイパーリンクするVBAを作成したのですが、 作ったVBAを同じエクセルでシート分けして、シート毎に作成されるフォルダー先を変更設定しても VBAのシート1で変えた場所にしか反映されません。 シート1は「ABC」にフォルダーを作る様にしたいのでVBAのシート1の保存先を「ABC」に設定 シート2は「DEF」にフォルダーを作る様にしたいのでVBAのシート1の保存先を「DEF」に設定 上記を設定した後にエクセルのシート2でマクロ実行しても「ABC」フォルダーの中に作ってしまう。 VBAの内容が変なのでしょうか? それともエクセルの仕様なのでしょうか? エクセルのバージョンは2003です。 検索等をしても特にHITしなくて・・・ 申し訳ありませんが、解る方いらっしゃいませんでしょうか? 保存先指定は下記、VBAの編集で可能。 「wkStr = ThisWorkbook.path & "\" & ActiveCell.Value」の「"\"」のところです。 例:ABCフォルダーの場合 「wkStr = ThisWorkbook.path & "\ABC\" & ActiveCell.Value」 現在のマクロ Sub MakeHyLink() Dim wkStr As String If ActiveCell.Column <> 1 Then Exit Sub If ActiveCell.Value = "" Then MsgBox "アクティブセルは未入力、やり直し" Exit Sub End If wkStr = ThisWorkbook.path & "\" & ActiveCell.Value If Dir(wkStr, vbDirectory) = "" Then MsgBox "フォルダー:" & wkStr & vbLf & " を、作成します。" MkDir wkStr Else MsgBox "フォルダー:" & wkStr & vbLf & " は、存在します。" End If ActiveSheet.Hyperlinks.Add Anchor:=ActiveCell, Address:=wkStr End Sub

  • 列幅、行の高さを指定するマクロ

    元マクロ初心者(今はほとんど忘れています)です。 列幅、行の高さを変更するマクロを以前作りました。 セルに指定する列幅を入力するのですが、 最近100以上の値の時はスキップされることに気づきました。 100以上の値でも処理されるようにするにはどうすればよいでしょうか。 Sub 列幅変更マクロ() ' ' Macro1 Macro ' マクロ記録日 : 2004/1/31 ユーザー名 : ' 列幅の変更 ' Keyboard Shortcut: Ctrl+l ' If MsgBox("→:列幅を変更します。右の方向にセル内の数値に従って処理しています。一番右のセルに半角で「@」を終わりの印として入力してください。", vbOK) = 1 Then Do Until ActiveCell.Value = "@" If ActiveCell.Value < 100 Then If ActiveCell.Value > 0 Then Selection.ColumnWidth = ActiveCell.Value End If End If ActiveCell.Offset(0, 1).Select Loop End If End Sub Sub 行の高さ変更マクロ() ' ' Macro2 Macro ' マクロ記録日 : 2004/2/1 ユーザー名 : ' 行の高さ変更 ' Keyboard Shortcut: Ctrl+p ' If MsgBox("↓:行の高さを変更します。下の方向にセル内の数値に従って処理しています。一番下のセルに半角で「@」を終わりの印として入力してください。", vbOK) = 1 Then Do Until ActiveCell.Value = "@" If ActiveCell.Value < 100 Then If ActiveCell.Value > 0 Then Selection.RowHeight = ActiveCell.Value End If End If ActiveCell.Offset(1, 0).Select Loop End If End Sub

  • マクロFind検索で見つからなかった時の対処

    エクセル2013です 以下のコードを作成しましたが .Rowが色で塗られ 「型が違います」でERRになります。 .Columnの方はERRでなく なぜ.Rowの方がERRなのでしょうか? よろしくお願いします。 Dim 検索行番号 As Range Dim 判定列番号 As Range Dim 検索列番号1 As Range Dim 検索列番号2 As Range Set 検索行番号 = Rows(1).Find("みかん").Column If 検索行番号 Is Nothing Then MsgBox "みかんが有りません。" End If Exit Sub Set 判定列番号 = Rows(1).Find("りんご").Column If 判定列番号 Is Nothing Then MsgBox "りんごが有りません。" End If Exit Sub Set 検索列番号1 = Range("B:B").Find("大箱").Row If 検索列番号1 Is Nothing Then MsgBox "大箱が有りません。" End If Exit Sub Set 検索列番号2 = Range("B:B").Find("小箱").Row If 検索列番号2 Is Nothing Then MsgBox "小箱が有りません。" End If Exit Sub

  • エクセルでフォルダまたはファイルを開くマクロですが、どのように改良すれ

    エクセルでフォルダまたはファイルを開くマクロですが、どのように改良すればよろしいでしょうか? 下記マクロは、エクセルシートのJ列のあるセルをダブルクリックすると、そのセルに記入された文字列を検索して、該当のフォルダまたは、写真が開きます。(エクセルファイルと写真は同フォルダに保存している場合のみ有効) 困っていることは、J列のセルと該当フォルダまたは、写真ファイルをリンクさせたいのですが、文字列が全て一致している時のみしか開かないことです。 D<デジカメ<商品名フォルダ<写真ファイル 例えば セルJ3の文字列がABCEで、フォルダ名またはファイル名がABCDEFであった場合、文字列ABCEを含む条件で、フォルダ名またはファイル名ABCDEFを開くように改良したいのですが、 また、エクセルファイルと写真ファイルの保存場所は、全く違うフォルダにしたいのですが、 エクセルファイルと写真ファイルは、別フォルダの場合、どのように検索先フォルダのパスを入れたら良いのでしょうか? マクロに詳しい方ご教授下さい。よろしくお願い致します。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim myPath As String If Target.Cells(1, 1).Column <> 10 Then Exit Sub Cancel = True myPath = ThisWorkbook.Path & "\" & Target.Cells(1, 1).Text If Dir(myPath, vbDirectory) <> "" Then Shell "explorer.exe /e,/root," & myPath, vbNormalFocus Exit Sub End If myPath = Replace(LCase(myPath), ".jpg", "\" & Target.Cells(1, 1).Text) If Dir(myPath, vbNormal) <> "" Then Shell "rundll32.exe shimgvw.dll,ImageView_Fullscreen " & myPath, vbNormalFocus End If End Sub

  • 複数ファイルのデータを1つのファイルへ纏めるマクロ

    マクロの実行で、Excel形式の約400個のファイル中のデータを1つの出力ファイルへ纏める為のマクロを作成したいのですが、VBAの初心者で、スクリプトの書き方が分からず大変困っております。 入力ファイルの中身は頻繁に追加、削除を繰り返しており、そのたびに入力ファイルを目視確認後、出力ファイルを手動で修正している状況でございます。 大変お手数ですが、マクロがお分かりの方がいらっしゃいましたら、ご教示を宜しくお願い致します。 ・入力ファイルは、以下ような名前になっております。 課題参加者_23RF3001.xlsx 課題参加者_23RF3005.xlsx 課題参加者_23RF3072★.xlsx 課題参加者_23RF3073.xlsx 課題参加者_23RF3199.xlsx 課題参加者_23RF3543.xlsx ・入力ファイルのデータは、添付しました画面イメージの通りで、  フォーマットは全て同じです。 ・出力ファイルに吐き出す入力データはB列~K列とN列になります。 ・出力ファイルのタイトルは、1番目に呼び出したファイルのB列~K列とN列を使う。 ・出力ファイルのA列のデータは、入力ファイル名の『23RF3001』、『23RF3543』などを入力データ分入れる。 ・出力ファイルのタイトルに使う、入力ファイルのタイトルは以下のようになっています。   B列~E列のタイトルは、6行目、7行目が結合されたセルに入っています。  F列のタイトルは、5行目、6行目、7行目が結合したセルに入っています。  G列~H列のタイトルは、6行目、7行目が結合されたセルに入っています。  I列~K列のタイトルは、7行目のセルに入っています。  N列のタイトルは、6行目、7行目が結合されたセルに入っています。 ・出力ファイルへ吐き出したい、入力ファイルデータの範囲は、  B列~K列の8行目以降とN列の8行目以降のデータになりますが、  『職員番号』、『名前』、『部門』に記載が有る行のみを出力ファイルへ吐き出します。  N列はリストの最後の行まで文字が入力されていますが、  N列についても、上記の『職員番号』、『名前』、『部門』に記載が有る行のみを出力ファイルへ吐き出します。 ・出力データへ吐き出す時の書式フォーマットは以下の通りになります。  A列=文字形式  B列=数値形式  C列~F列=文字形式  G列、H列=日付形式  I列~K列=チェックボックス(フォームコントロール形式(入力データと同じ形式))  N列=文字形式 ・入力データは今の所50行まで入力可能としています。