【VBA】エクセルのリストに基づいて一括で空フォルダを作る

日々、訳のわからない指示を出されて、辟易としています。別に雑務が苦な訳ではありません。指示の仕方の下手さなどなどに、同僚全員が一様にヤル気をなくしていっている職場なのです。

指示が曖昧すぎて動けない。

先日、資料の保存について指示を受けました。 「関係書類を適切なフォルダに保管しておくこと」と。指示の曖昧さは、そのメールからすでに始まっていました。まず、メールの宛先が複数にも関わらず(CCには入れず、全員を宛先に入れいている状態)、メール本文でも明示なし。前述のような指示だけが書かれたメールを受信しました。

曖昧すぎる指示に、「これはこれまでも発生していたタスクで、きっと他の人にはおこの指示でわかるのだろう」と、担当ではないとしばらく放置。

しかし、宛先に入っていた人誰一人として返信しない。

あれれ?と思って、別件のついでに進捗をと裏で聞いてみたところ、「何言ってるのか分からなくて放置してる」との返答。

・・・。

あー、うん、この会社、どうやって人育ててるんだろう。昇格させるときに超基本の研修実施してあげてほしい。

(数ヶ月働いてみると、「指示内容を上司に確認する」が正解ではないことに気づきます。聞かないよりもずっっっっと面倒くさいことになります。そして、ジワジワと勤労意欲を削がれていくのです。)

明らかに二度手間・・・ですね。

結局、新参者の私が人身御供。そして判明したことは、上司の行動の尻拭い的なタスクだったということ。

上司が稟議システムにアップロードした資料を、全部ダウンロードして案件ごとにフォルダに格納するというタスクです。

・・・分かります。「無駄な作業では?」と思える部分が2箇所もあります。

まず、システム化したのに、なぜに二重管理をしたがる?という点。次に、アップロードしたのは上司なので、上司がデータ持ってるのでは?という点(つまり、ちゃんとフォルダ管理していれば、部下にわざわざ新規フォルダ作成させて、その上ダウンロードさせる必要ないのでは?)。

このあたりは序の口。諦める、が正解です。

VBAで複数フォルダを一括作成する

作成するファルダの名前の付け方にはルールがあります。

(フォルダ名)=(システムによって自動採番される番号)+(稟議署名)

システムの稟議書一覧画面では、番号と稟議署名が別のカラムになっているため、一覧画面をコピーしてエクセルに貼り付けただけでは足りません。下図のようにCONCATENATE関数を用いてフォルダ名のカラムを追加しました。

2020-05-03 21.50.32

テーブルにしているので、A2セルに「=CONCATENATE(B2,” “, C3)」と入力すると、自動的に下のセルにも数式がコピーされます。

空のフォルダを作るだけなので、下のようなコードだけでOK。

Dim rng As Range
Dim newDirPath As String
For Each rng In Range("A1").ListObject.ListColumns(1).DataBodyRange
newDirPath = ThisWorkbook.Path & "\" & rng.Value
If Dir(newDirPath, vbDirectory) = "" Then
MkDir newDirPath
End If
Next rng
MsgBox "Folders has been created."

このファイルを、空フォルダを作りたいフォルダに保存します。そしてマクロを実行しておしまいです。(私はこの後せっせと資料をダウンロードしましたが。)

フォルダ名の整形の必要がないのならば、こちらの方法もありですね。