• ベストアンサー

Excelブックの振り分け

あるコードがファイル名となっているブックが500個(!)ほど1つのディレクトリに入っています。そのコードを基にマスタを参照して、それぞれのフォルダへ移動させたいと思います。(社員番号のファイル名でそれを基に部署フォルダに振り分けるようなイメージ)。VBAを使えばいいのでしょうが、何をどうしたものやら・・。緊急なんですが、お願いします!

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

500個ほどのファイルを、そのファイルを基準に振り分ける例です。 マスタ(book)の  社員番号(ファイル名)に該当するセル範囲に『社員コード』、  部署に該当する範囲に『部署コード』の範囲名を付けます。 VBA内の2つのフォルダを設定します。 ただし、2つのフォルダが異なるドライブにあると使えません。 マスタ(book)の『社員コード』、『部署コード』が入っているシートのコードウインドウに貼り付けます。 実行する時は、元ファイルのコピー(バックアップ)を行った後、実行して下さい。 Sub Furiwake()   Const srcFolder = "A:\社員\" '*** Bookのあるフォルダ(指定する)   Const desFolder = "A:\部署\" '*** 振り分けるフォルダ(指定する)   Dim fileName As String 'Excelファイル名   Dim rg As Range '検索した社員コードのセル   Dim schCode As String '検索する社員コード   Dim schFolder As String '検索した社員コードに対するフォルダ   fileName = Dir(srcFolder & "*.xls")   While fileName <> ""     'ファイル名からコードを取り出す     schCode = Application.Substitute(fileName, ".xls", "")     '取り出したコードと一致するセルを探す     Set rg = Range("社員コード").Find(what:=schCode, LookAt:=xlWhole)     If Not rg Is Nothing Then       '取り出したコードと一致するセルと同じ行の部署を取り出す       schFolder = Cells(rg.Row, Range("部署コード").Column)       'フォルダ+ファイル名でファイル名前を変える       Name srcFolder & fileName As desFolder & schFolder & "\" & fileName     Else       'コードが見つからなかった時       MsgBox fileName & "の対象部署はありません"     End If     '次のExcelファイル     fileName = Dir   Wend End Sub

その他の回答 (2)

  • TTak
  • ベストアンサー率52% (206/389)
回答No.2

こんな感じでしょうか・・・ あとは実際の条件に合わせて文字列関数の所を変化させる、 CASEの項目を増やすなどしてください。 当方はEXCEL2000で動作確認しました。 Sub FileMoveme() Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.GetFolder("500個ファイルがあるフォルダのパス") Set fc = f.Files For Each f1 In fc Select Case Left(f1.Name, 1)'先頭の1文字で区別する場合 Case "A" f1.Move "振り分けるフォルダAのパス" & f1.Name Case "B" f1.Move "振り分けるフォルダBのパス" & f1.Name Case "C" f1.Move "振り分けるフォルダCのパス" & f1.Name Case Else End Select Next Set fs = Nothing Set f = Nothing Set fc = Nothing End Sub

回答No.1

マスタがどんな形なのか分からないのですが、例えばExcelのワークシートのA列にコードが、B列に部署名が、1行から500行まで並んでいる様なもので、ファイル名が123.xlsのとき、コードは123だとします。 そしてC:\ABCのフォルダにファイルが500個存在し、C:\DEFのフォルダに部署名のフォルダが、例えば C:\DEF\営業部 の様な形で存在しているとします。 マスタのワークシートで、以下のマクロを実行すればどうでしょうか。 Sub Macro1()  Dim i As Long  On Error Resume Next  ChDir "C:\ABC"  For i = 1 To 500   Name "C:\ABC\" & Cells(i, 1) & ".xls" As "C:\DEF\" & Cells(i, 2) & "\" & Cells(i, 1) & ".xls"  Next i End Sub

関連するQ&A

  • 複数のブックの同じセルを参照したい、(Excel2000)

    Win98でExcel2000を使っています。 あるフォルダにまったく同じレイアウトのブックが、社員の人数分あります。 (Accessから社員のマスタを使ってはきだしたブックなので、数やファイル名は可変です。) これらのブックのある1つのセルを参照して合計値等を計算したいと思っています。 (イメージ的には、全ブックを串刺しにするような感じでしょうか?) やり方が思いつきません。 何かい方法ありますでしょうか?

  • ExcelブックからシートデータをPDFで保存する

    ExcelブックからシートデータをPDFで保存する Excel2000 VBAで処理しています。 現在、プリンターをPDF作成ソフトにしてプリンター出力として保存しています。 コード: ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True これですと次の点で困っています。 1.通常使うプリンタにしないと出力できません  この点は別のプリンタでも出力するためにVB6.0と同じようにprinterオブジェクトを使おうとしましたが、参照設定でVisual Basic objects and proceduresを参照有に使用としましたがエラーになって出来ませんでした。 2.保存先のフォルダおよびファイル名をセルに指定しておいて、ワンクリックで保存できないでしょうか。 いちいち保存先のフォルダに移動して、ファイル名を書き込むのが手間です。 1,2回のことでしたら手間ではないのですが、毎日何十回と行うのでVBAで手間を省こうとしました。しかし、PDF保存の手間は省けていません。 よろしくお願いいたします。

  • 参照したいブックのパス名に"["

    外部参照についてお尋ねします。 他のブックを参照するのに ='パス名[ブック名]シート名'!セル名 と入力しますが、参照したいブックの保存フォルダ名に"[ ~ ]"と角カッコが使われています。 ここがブック名を括るカッコと認識されてしまい、参照がうまくできません。 パス名のカッコをエスケープする方法はありますでしょうか。 諸事情からフォルダ名や被参照ブックの移動などができないので困っています。 ご存知の方いらっしゃいましたら、ご教示いただけますようお願いいたします。

  • エクセルについて 複数のブックをまとめて

    エクセルで作成した複数のブックがあります。 どれもマクロ・VBAを使っています。 そこで、この作成した複数のブックを一つの共通メニュー画面から起動させたいのです。 作成した複数のブック(例) 1出退勤(職員の出退勤を管理するブック) 2カリキュラム編成(カリキュラムを編成するためのブック) 3出張申請用(出張を申請するためのブック) 上記のようなブックを共通のメニュー画面から、選択し、起動したいです。 共通メニュー画面から1を選択すれば出退勤のブックが開くようにしたいです。 また、どれも社内の共有フォルダーに保存しています。メニュー画面もそのようになります。 これを個人のフォルダーに保存しても変わりなく使用できるようにしたいです。 かといって、個人が入力したものがマスターに反映されるといったものではなりません。 あくまで、個人で使用できれば問題ありません。 メニュー画面のみのコピーし、あとのブックは共通フォルダに固定でも、メニュー画面以外のブックもまるまるコピー移動でも、形は問いません。 とにかく、複数のブックを統合ではなく、ぱっとみたところ一つのソフトのようにパッケージング?するイメージです。 ご教授いただけるとありがたいです。 よろしくお願いします。

  • EXCELで複数のファイルを同じブック内で開きたい

    久しぶりにVBAを使用してやらせたいことがありますので、質問です。 複数のCSVファイルがあり、これを同じブック内のシートとして開くことは 出来ますでしょうか。 メニューから開くとして、それぞれのファイルを開くと、別々のブックにて開いてしまいます。 これを同じブックで、シート別に開かせたいのですが、出来ますでしょうか。 さらに、これをVBAでやりたいと考えております。 まず考えたのは、 ”Application.GetOpenFilename”です。 ただし、これを利用すると、別々のブックでしか開くことができませんでした。 次に考えたのが、”QueryTables.Add”を利用することです。 これだと、同一ファイル、同一シート内にデータを取り込むことができるので、 問題ないのですが、ファイル名を指定しなければなりません。 ファイルが変わるたびにVBAでパスを修正するのは大変ですので、 ”QueryTables.Add”のデータ取り込みでファイル選択ダイアログが開くような コードがあればよいと考えております。 ファイル選択のダイアログが開いて、そのファイルのパスが取得できるような コードにすれば、”QueryTables.Add”にてデータの取り込みができそうなのですが、 どうすればよいか思いつきません。 "Dialogs(wdDialogFileFind)"というものも見つけたのですが、うまくいきませんでした。 何か良い方法がありますでしょうか。 よろしくお願いします。 Dialogs(wdDialogFileFind)

  • 特定のエクセルブックでしか機能しないアドイン

    VBAでエクセルのアドインを作っております。 特定のエクセルブックでしか機能しないアドインの作り方はあるでしょうか? たとえばファイル名「対象ブック」というのがあったとして、 このブックでしかアドインが機能しないようにするにはどうしたらいいでしょうか? アドインのコード中に機能するブック名を直接書きこむことで指定するのが 手っ取り早いのでしょうか?

  • ブックを開かずに、フォルダ内にある複数ブックの、特定セルの値を抽出した

    ブックを開かずに、フォルダ内にある複数ブックの、特定セルの値を抽出したいのですが、やり方をご存じの方がいらっしゃったら教えてください。 フォルダ内には150個ほどエクセルファイルがあり、中身のシート名・フォーマットは同じなのですが、すべてファイル名が違います。 ファイルを開くことなく、これらのファイルの特定のシートの特定のセルにある値を、全て1枚の表にまとめることは可能でしょうか? フォルダ名 →"AGENDA_RIREKI" 参照したいファイル名 →ファイルによって異なる "#1111 AAA.xls"など 参照したいシート名→ "AGENDA" 参照したいセル→ "A7" と "E20~E70(E列のみ) データをまとめたいファイル名→ "AGENDA_matome.xls" データをまとめる時の形↓ (A列)          (B列)            (C列)        (D列) ファイル1のA7の値 ファイル1のE20の値  ファイル2のA7の値  ファイル2のE20の値                     E21の値                    E21の値                     ・                     ・                     ・     VBAは初心者です。。できればコードをそのまま拝借したいです。 お知恵を貸してください。よろしくお願いします。

  • エクセルVBAでブックを開きたいのですが、

    エクセルVBAでブックを開きたいのですが、 アクティブシートを別のブックに移動させたいのですが、 まず、目的のブックを開く → 移動させたいシート名を右クリック → 移動またはコピー を選択 → 移動先ブック を選択  というふうにしようと思っていますが、 Workbooks.Open Filename:= _ "C:\Documents and Settings\YUMIKO\My Documents\YYYY.xls" のようにファイル名を入れると開くことができました。 が、   Workbooks.Open Filename:= _ "C:\Documents and Settings\YUUKORON\My Documents\Range("F1").Value.xls" のように、アクティブシートの セルF1にファイル名を入れて、開きたいのですが、どうしても開くことができません。いろいろ調べて試しましたが、無理でした。 基本的にマクロで記録で作っている初心者です。 回答よろしくお願いします。

  • エクセルVBAで複数のブックから指定のシートを別のブックに複写するには

    エクセルVBAの超初心者です。 複数のフォルダに「●●社計算書(2010年3月).xls」・・・()内の年月は毎月増えます。格納されているフォルダは各会社名です。 というブックがあります。その各ブック内の売上というシートにある商品コードと売上金額を別の集計用ブックで集計したいと思っています。 どのように集計用ブックにコードを書いたらよいのでしょうか? 1 商品コードは各社共通です。 2 ブック名は共通ですがブック内のフォーマットは共通していません。(シート名は共通) 3 集計するのは集計時の年月度のデータです。 要領を得ず、ぶしつけな質問かと思いますが、大変困っています。 どなたかお分かりになる方、ご教授願います。 

  • Excelで他のブックのセルを参照したいのですが

    コンボボックスにセットする値を、 VBAで他のブックを参照してセットしたいと思っています。 ブックAのシート1にコンボボックスを作り、 ブックBのシート1から取得しようと考えています。 ブックBのシート1には、あらかじめ「範囲A」の名前を定義して この範囲の値を参照するつもりです。 ただ同じフォルダ内にブックBを置いていれば参照できるのですが、 他のフォルダにブックBを置くと参照されません。 <同じフォルダにブックBを置いた場合>○参照できた ComboBox1.ListFillRange = "[ブックB.xls]シート1!範囲A" <他のフォルダにブックBを置いた場合>×参照されない ComboBox1.ListFillRange = "C:\[ブックB.xls]シート1!範囲A" 記述の仕方がおかしいのでしょうか? 宜しければご教授お願い致します。

専門家に質問してみよう