[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『フォルダの作成』(ろーぐ)
お邪魔します。
フォルダをたくさん作成する際に下記のマクロを使ってます。
都度A2にパスを入力しなくてもいいようにはできないものでしょうか?
よろしくお願いいたします。
Sub フォルダ作成()
Dim Path As String '作成予定フォルダの上位パス Path = Range("A2").Value
Dim i As Long 'フォルダ数カウンタ
For i = 2 To Range("B2").End(xlDown).Row
Dim FolderName As String '作成するフォルダ名 FolderName = Cells(i, 2).Value
Dim NewDirPath As String '作成予定のフォルダパス NewDirPath = Path & "\" & FolderName
'作成予定フォルダと同名のフォルダの存在有無を確認し、存在しない場合フォルダ作成 If Dir(NewDirPath, vbDirectory) = "" Then MkDir Path & "\" & FolderName Else MsgBox "フォルダ名:[" & FolderName & "]はすでに存在するためスキップします" End If
Next i
MsgBox "終了しました。"
End Sub
< 使用 Excel:Excel2010、使用 OS:Windows10 >
それとも、ダイアログ表示してフォルダ指定したい、とか?
With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then Path = .SelectedItems(1) Else Exit Sub End If End With (???) 2019/02/20(水) 13:15
A2 =LEFT(CELL("filename"),FIND(">",SUBSTITUTE(CELL("filename"),"\",">",LEN(CELL("filename"))-LEN(SUBSTITUTE(CELL("filename"),"\",""))),1)-1)
これでフォルダを作りたい場所にエクセルファイルを放り込んでやれば動く
(名無) 2019/02/20(水) 13:26
そのとおりです。
日に何度か実行するのですが場所が場所が変わるのでその都度入力してます。
マクロとパスが分からないという声があったので、何か方法があればと相談
いたしました。
>ダイアログ表示してフォルダ指定したい、とか?
ダイアログ表示?
ごめんなさい、勉強不足で理解できておりません。
パスを表示させたいといことでしょうか?
それでしたら、そのとおりです。
説明が下手ですいません。
>置いてある場所を関数取得で動かしてはどうか
取得できました。
ですがですがフォルダが作れません。
ずっ---と砂時計が出ます。
マクロに問題があるのでしょうか?
(ろーぐ) 2019/02/20(水) 17:07
エラーメッセージは既にフォルダはありますと表示されますが
フォルダ作成されていないです。
それでずっ---と砂時計で終わる気配なしです。
明日また調べてみます。
(ろーぐ) 2019/02/20(水) 17:11
そして、B2からEnd(xlDown)しているので、B3以降のセルに何も入力していないために、1048576行まで繰り返していたりしませんか? ブレークポイントを設定するとか、途中で止めて、F8キーでステップ実行して、思った通りになっているか確認してください。(現状だと、B3セルへの入力が必須な書き方になってます)
(???) 2019/02/20(水) 17:33
ごめんなさ、途中で我慢できなくなりました。 口出させてください。 変更点 1)変数宣言をループの外に置いた 2)pathの指定を???さんの方法をそのまま使って、実行後に選択するようにした。 3)最終行の取得を、B2からCtrl+↓から、B最終行からCtrl+↑に変更した。 4)被ったフォルダがループ内でメッセージ表示されるのはうざいと思うので、 最後に出力するよう変更した。 Sub フォルダ作成() Dim Path As String '作成予定フォルダの上位パス Dim i As Long 'フォルダ数カウンタ Dim FolderName As String '作成するフォルダ名' (1 Dim NewDirPath As String '作成予定のフォルダパス' (1 Dim msg As String With Application.FileDialog(msoFileDialogFolderPicker)'(2 If .Show = True Then Path = .SelectedItems(1) Else Exit Sub End If End With For i = 2 To Range("B" & Rows.Count).End(xlUp).Row'(3 FolderName = Cells(i, 2).Value NewDirPath = Path & "\" & FolderName '作成予定フォルダと同名のフォルダの存在有無を確認し、存在しない場合フォルダ作成 If Dir(NewDirPath, vbDirectory) = "" Then MkDir Path & "\" & FolderName Else msg = msg & vbNewLine & "[" & FolderName & "]"'(4 End If Next i If msg <> "" Then'(4 MsgBox "フォルダ名:" & msg & vbNewLine & "はすでに存在するためスキップしました" Else MsgBox "終了しました。" End If End Sub
(稲葉) 2019/02/20(水) 18:38
ない場合は作って、ある場合はそのままでよければもっと単純にできそうな…
(もこな2) 2019/02/20(水) 18:56
ルート(親)フォルダがダイアログで指定できて B2以下に列挙されているものが重複していようが、既に存在しようがお構いなし おわったことだけメッセージ表示(既にあるなどのメッセージはなし)
というルールでよければ
Sub さんぷる() Dim るーと As String Dim i As Long
With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then るーと = .SelectedItems(1) Else Exit Sub End If End With
With ActiveSheet For i = 2 To .Cells(.Rows.Count, "B").End(xlUp).Row Shell Environ$("ComSpec") & " /c md """ & るーと & "\" & .Cells(i, "B").Value & """" Next i End With
MsgBox "おわりました"
End Sub
↑のように、コマンドプロンプトのMDコマンドを実行すれば事足りそうな気がします。
(今回は返り値を使うわけでも、フォルダになにかを保存するわけでもないので、非同期のShell関数でもよいと考えました)
(もこな2) 2019/02/20(水) 22:56
皆さまよりご意見をいただきまして感謝いたします。
返事が遅くなりごめんなさい。
*********************************
???様
ありがとうございます。
教えていただいたコードはパスを取得するものだったのですね。
勉強になります。
こちらのコードを用い、下から最終行を取得に修正いたしました。
' •フォルダを選択する[参照]ダイアログボックス
With Application.FileDialog(msoFileDialogFolderPicker)
'有効なボタンがクリックされた If .Show = True Then 'フルパスの取得 Path = .SelectedItems(1) Else Exit Sub End If End With
********************************
稲葉様
たくさんの変更ありがとうございます。
2)は、実行後とは目からウロコです。
他のコードでもそのいう考えは使えそうです。
4)は、たくさんかぶると本当にうざかったです(笑)
おかげで目がちかちかしなくなりました。
********************************
もこな2様
コマンドプロンプト??
ファイル名を転記させるのにtree使った程度の知識しかありません。
もう少し勉強しておきます。
最後の「おわりました」がカワイイです。
メッセージでなくても問題ない人から好評でした。
********************************
皆さまに教えていただいたこと勉強して、次に生かしていきます。
本当に色々勉強になりました。
次はフォルダ名の取得を考えております。
また、分からない際はお邪魔するかもしれません。
その時はよろしくお願いします。
どうもありがとうございました。
(ろーぐ) 2019/02/21(木) 11:35
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.