画像ファイルを、それぞれのフォルダに仕分けする?
こんなにたくさんあるのにどうやってやればいいんだよ…
こんな悩みを解決します。
自動振り分けするマクロの使い方
「マクロ」というワードが出てきて
なんか難しそう…
面倒くさそう…
と戻るボタンをクリックしそうになったあなた…
ちょっとまってください
難しいコードはすべてコピペ
マクロどころかエクセルすらほとんど使ってこなかった僕でもできた手順なので安心してください。
誰でもわかるように画像をたくさん使って説明するよ
この方法さえ使えるようになれば、ECサイトにアップする画像がどれだけ増えても怖くありません。
数時間かかる作業が数分で完了するので爽快ですよ。
ぜひ参考にして実践してくださいね。
自動振り分けするマクロの使い方
大前提として画像のファイル名は
品番(フォルダにつけたい名前)‐01(連番)
になっている必要があります。
今回はハイフン(ー)でつないでますが、アンダーバー(_)やドット(.)の場合も対応できます。
関連記事:画像ファイル名を一括で商品番号(SKU)と連番に変更する方法
振り分けマクロの使い方を画像付きで解説
画像が集められているフォルダのネットワークパスを
ステップ1で開いたエクセルのA1セルにコピペします。
フォルダのネットワークパスは
フォルダを右クリック→プロパティ
「共有」のタブを選べば見つかります。
「Microsoft visual basic for Appications」というウィンドウを開きます。
方法はエクセルの画面でキーボードの「Alt」と「F11」を一緒に押せばOKです。
ノートPCを使用していて開かない場合は、「Fn」キーを一度押してから試してください。
「挿入」→「標準モジュール」の順にクリックすればOKです。
「ツール」→「参照設定」→開いた参照設定から「Microsoft Scripting Runtime」を選んで「OK」をクリック
標準モジュールに下記のコードをコピペしてください。
Sub Furiwake() 'ファイル名の連番前の文字列でフォルダを作り分配ver2。
Dim FPath1, FPath2, FName
Application.ScreenUpdating = False
FPath1 = Range("A1").Value & "\"
FName = Dir$(FPath1 & "*.*")
Do While FName <> ""
If InStr(FName, "-") > 0 Then
FPath2 = Left(FName, InStr(FName, "-") - 1)
End If
On Error Resume Next
MkDir$ FPath1 & FPath2
On Error GoTo 0
FileCopy FPath1 & FName, FPath1 & FPath2 & "\" & FName
Kill FPath1 & FName
FName = Dir$
Loop
Application.ScreenUpdating = True
End Sub
「ツール」→「マクロ」→「Furiwake」→「実行」
の順にクリックしておけばOKです。
マクロ実行後には
こんな感じに振り分けに成功です。
「_」や「.」でつないでいる場合はどうすればいいの?
コード内にある「ー」を「_」や「.」に書き換えればOKです。
If InStr(FName, “-“) > 0 Then
FPath2 = Left(FName, InStr(FName, “-“) – 1)
上記のコードにある(ー)を例えば(_)なら
If InStr(FName, “_“) > 0 Then
FPath2 = Left(FName, InStr(FName, “_“) – 1)
にすればOKということです。
調べたら意外と答えが出てくる。やってみたら意外とできる(以下余談)
今回紹介したマクロは、もちろん僕が考えたわけではありません。(威張るな)
調べたら近そうな質問があったので拝借したものです。
今のご時世、「調べたら解決する疑問なんてたくさんある。」
あらためてそう思いましたよ。
ファイル名からフォルダを生成して振り分けてくれるソフトってありますか?
Excelマクロを作ってみました。
1.Excelを起動し [Alt]+[F11] で開く Visual Basic Editor のウィン
ドウで、[挿入]-[標準モジュール] とたどります。
2.[ツール]-[参照設定] で Microsoft Scripting Runtime を指定しま
す。
3.標準モジュールに下記をコピペして、そのウィンドウを閉じます。Sub Furiwake() ’ファイル名の連番前の文字列でフォルダを作り分配。
Dim FPath1, FPath2, FName
Application.ScreenUpdating = False
FPath1 = Range(“A1”).Value & “\”
FName = Dir$(FPath1 & “*.*”)
Do While FName <> “”
Select Case InStr(FName, “_”)
Case Is > 0
FPath2 = Left(FName, InStr(FName, “_”) – 1)
Case Else
FPath2 = Left(FName, InStr(FName, “.”) – 1)
End Select
On Error Resume Next
MkDir$ FPath1 & FPath2
On Error GoTo 0
FileCopy FPath1 & FName, FPath1 & FPath2 & “\” & FName
‘ Kill FPath1 & FName ’※
FName = Dir$
Loop
Application.ScreenUpdating = True
End Subシートのセル A1 に、画像ファイルのあるフォルダのフルパスを次の
ように入力して、[ツール]-[マクロ]-[マクロ] から Furiwake を指定
して実行します。
入力例: C:\MyFiles\PhotoData\JPGFiles
この入力されたフォルダの中にサブフォルダを作成して振り分けます。※の行の先頭の Kill の前にある ’を削除して実行すると、元画像
引用元:(ファイル名からフォルダを自動生成して振り分けしてくれるソフト -ファ- フリーソフト | 教えて!goo)
ファイルが削除されてしまいますので、テストはこのまま実行して
ください。
質問に対してのこの回答を見た時は
難しそう。
面倒くさそうだなぁ
と怯みました。
とは言っても、
やらないと自分がツライ思いをするだけなんで、書かれているままにとりあえずステップを踏む。
(ー)に対応してないコードだったので失敗しましたが
わからないなりに、コードを読んで、怪しそうなところを変更してみたら意外とうまくいきました(笑)
その後は、モチベーションが高いうちにいろいろと調べて、
今回コピペしてもらったコードに改変した流れです。
何を変更したのか?というと
「case」を「if」の計算式に変えただけです。
きれいなコードなのかわかりませんが今はこれで満足してます。
ExcelとVBAの入門解説|エクセルの神髄 (excel-ubara.com)
↑のサイト(エクセルの神髄さま)には本当にお世話になっています。
まとめ~自動化したときの効果は絶大すぎる~
今回はマクロを使って大量の画像をフォルダに振り分ける方法を紹介しました。
エクセルの「A1」にパスを添付
VBAを開いて、標準モジュールを挿入し
ツールにある参照設定を「Microsoft Scripting Runtime」に設定
今回紹介したコードを張り付けて実行
すればOKです。
ググったときは「難しそう」と怯みましたが、調べながら進めていけば意外とすんなりいきました。
なにより作業効率、費用対効果は抜群に良いですよね。
「同じ作業を繰り返すことは自動化できる」
なんてよく言いますが、他にも独学でできそうなものがあったら紹介していきます。