• 締切済み

フォルダーのとExcelの連動ってできますか?

パソコン内HDDのとある場所のフォルダの一覧を手打ちで入力したExcelデータがあります。Excelで表示しているフォルダーの階層は4階層あります。 A列に4階層目のフォルダー名、B列に3階層目のフォルダー名、C列に2階層目のフォルダー名、D列に1階層目のフォルダー名を既に入力してあるとします。ここに入力されているフォルダー名は、これから生成する予定のフォルダーと既にHDDに生成されているフォルダー名が混在しています。 これからE列に4階層目のフォルダーの有無、F列に4階層目のフォルダー内のファイル数を表示させたいです。 エクスプローラーで、4階層目に新しいフォルダーを生成すると、E列が自動的に「有」になり、そのフォルダーにファイルを追加すると、自動的にF列でカウントされる、という状態にしたいのです。 ------------------------------------------------------------------------------- 具体的に例を示します。 最終的には以下のような表をExcelで作ります。設定は架空です。 A       B           C          D         E        F 店名     所属1         所属2       提出書類    提出有無   提出部数 中町店   岸和田市内店舗  大阪府内店舗  領収書     有        209 沼町店   岸和田市内店舗  大阪府内店舗  領収書     無        0 松ノ浜店  泉大津市内店舗  大阪府内店舗  領収書     有        0 米田町店  加古川市内店舗  兵庫県内店舗  領収書     有        23 現在はここまで手動入力で出来上がっています。 A       B           C          D         E        F 店名     所属1         所属2       提出書類    提出有無   提出部数 中町店   岸和田市内店舗  大阪府内店舗  領収書 沼町店   岸和田市内店舗  大阪府内店舗  領収書 松ノ浜店  泉大津市内店舗  大阪府内店舗  領収書  米田町店  加古川市内店舗  兵庫県内店舗  領収書 これから各店舗に提出書類を提出してもらいます。各店舗の店長は、一つののパソコンに自分たちでフォルダーを生成し、その中に書類データを保存します。フォルダーは以下のように生成します。 D:\領収証\大阪府内店舗\岸和田市内店舗\中町店 D:\領収証\大阪府内店舗\岸和田市内店舗\沼町店 D:\領収証\大阪府内店舗\泉大津市内店舗\松ノ浜店 D:\領収証\兵庫県内店舗\加古川市内店舗\米田町店 ・松ノ浜店の店長は、松ノ浜店で領収書が発生しなかったので領収書は1枚もありませんが、提出手続きを行ったかどうかの確認のため、空の「松ノ浜店」フォルダーを生成しました。 ・怠惰な沼町店の店長は、期限までに領収書を提出にこなかったので、「沼町店」フォルダーは生成されませんでした。 以上のような操作の結果、ドライブDとリンクさせたExcelファイルを開くと、E、Fが自動的に入力されている、という状態にしたいです。 A       B           C          D         E        F 店名     所属1         所属2       提出書類    提出有無   提出部数 中町店   岸和田市内店舗  大阪府内店舗  領収書     有        209 沼町店   岸和田市内店舗  大阪府内店舗  領収書     無        0 松ノ浜店  泉大津市内店舗  大阪府内店舗  領収書     有        0 米田町店  加古川市内店舗  兵庫県内店舗  領収書     有        23 ---------------------------------------------------------------------------------- そもそもExcelでこのようなことまでできるのかもわからないのですが、もしできるのであれば方法が知りたいです。 可能な限りExcel2010で表示したいのですが、他に推奨されるソフトや一覧方法等ありましたらお教え願います。 但し、フォルダー概況以外の情報(上記例で例えるなら店舗規模など、フォルダ操作に一切関係しない情報)も併記できるツールであることが必須です。 よろしくお願いいたします。

みんなの回答

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

以下のコードを標準モジュールにコピペします。 Private Const BaseDir As String = "D:\領収証\" 'ここが基点 Private bolVolatile As Boolean Sub chgVolatile()   bolVolatile = Not bolVolatile   Application.Volatile bolVolatile   MsgBox "再計算は " & bolVolatile End Sub Function Reported(R1 As Range, R2 As Range,R3 As Range) As String   Dim strDir As String   strDir = BaseDir & R1 & "\" & R2 & "\" & R3   Reported = IIf(Dir(strDir, vbDirectory) <> "", "有", "無") End Function Function ReportCount(R1 As Range, R2 As Range,R3 As Range) As Integer   Dim strDir As String   Dim i As Integer   Dim fName As String      strDir = BaseDir & R1 & "\" & R2 & "\" & R3      If Dir(strDir, vbDirectory) = "" Then     ReportCount = 0     Exit Function   End If      strDir = strDir & "\*.xls*"   fName = Dir(strDir)   Do Until fName = ""     i = i + 1     fName = Dir   Loop      ReportCount = i End Function 提出書類の有無を出したいところには =reported(C2,B2,A2) として、以下必要範囲までドラッグ(中町店がA2の場合) 部数の方も =reportcount(C2,B2,A2) として同様に。 これで求められますが、フォルダ内に変化が有っても Ctrl + Alt + F9 を押さないと再計算してくれません。 かといって自動再計算では、ファイルの読み込みに時間が掛かるために 操作がじれったくなります。 そこで、chgVolatile を加えました。 初期状態はFalseです。実行する都度、状態がFalse/Trueに切り替わります。 True状態ではどこかのセルが変更される都度、すべてが再計算されます。 また、F9 でも再計算されるようになります。 状況に応じて使い分けてください。 ※提出書類は、XLSファイルだけで良かったんですよね? By 沼町店 店長

関連するQ&A

  • VBAであるフォルダにあるフォルダを取得

    VBA初心者です。 フォルダの階層を下に掘ってパスの文字列を生成したいのですが あるフォルダの中にある全てのフォルダ名前を取得するにはどうしたらいいのですか?

  • エクセルで重複データの内容を右の列に増やす方法

    エクセル2007で、表(1)のようなレコードがあります。 B列とC列の両列をキー列として、両列が次の行と同じ場合、表(2)のように一行にまとめるVBAをどなたかご教示お願いします。 過去ログ等で重複データの行削除は理解できたのですが、キー列が2列の場合や、表(2)のように右の列にデータをどんどん増やす方法がわかりません。 条件は、レコードは1000行以上、市idと社idは昇順に並んでいるため重複データは必ず上下に連続している、商品の種類は50以上あり、どれ位右に列が増えるか不明、などです。 VBA初心者です。よろしくお願いします。 表(1)(sheet1) 県名|市id | 社id|社名|商品|空白|空白・・ 秋田|0001|0001|A株|青大|空白 秋田|0001|0001|A株|赤小|空白 東京|0002|0003|B株|黒中|空白 大阪|0004|0001|C有|赤中|空白 大阪|0004|0001|C有|白大|空白 大阪|0004|0002|D株|赤大|空白 大阪|0004|0002|D株|黄中|空白 大阪|0004|0002|D株|緑小|空白 ・ ・ 表(2)(sheet2) 県名|市id| 社id|社名|商品|商品|商品・・ 秋田|0001|0001|A株|青大|赤小|空白 東京|0002|0003|B株|黒中|空白|空白 大阪|0004|0001|C有|赤中|白大|空白 大阪|0004|0002|D株|赤大|黄中|緑小 ・ ・

  • エクセルで重複データの内容を右の列に増やす方法は?

    エクセル2007で、表(1)のようなレコードがあります。 B列とC列の両列をキー列として、両列が次の行と同じ場合、表(2)のように一行にまとめるVBAを、どなたかご教示お願いします。 過去ログ等で重複データの行削除は理解できたのですが、キー列が2列の場合や、表(2)のように右の列にデータをどんどん増やす方法がわかりません。 条件は、レコードは1000行以上、市idと社idは昇順に並んでいるため重複データは必ず上下に連続している、商品の種類は50以上あり、どれ位右に列が増えるか不明、などです。 VBA初心者です。よろしくお願いします。 表(1)(sheet1) 県名|市id | 社id|社名|商品|空白|空白・・ 秋田|0001|0001|A株|青大|空白 秋田|0001|0001|A株|赤小|空白 東京|0002|0003|B株|黒中|空白 大阪|0004|0001|C有|赤中|空白 大阪|0004|0001|C有|白大|空白 大阪|0004|0002|D株|赤大|空白 大阪|0004|0002|D株|黄中|空白 大阪|0004|0002|D株|緑小|空白 ・ ・ 表(2)(sheet2) 県名|市id| 社id|社名|商品|商品|商品・・ 秋田|0001|0001|A株|青大|赤小|空白 東京|0002|0003|B株|黒中|空白|空白 大阪|0004|0001|C有|赤中|白大|空白 大阪|0004|0002|D株|赤大|黄中|緑小 ・ ・

  • MkDir関数

    VBでフォルダを作成する、基本的なロジックを作成しています。 現在、仮にD:\にはフォルダが存在しないとして、 MkDir "D:\Test\Temp\" とするとエラーになってしまいます。 MkDir "D:\Test\" とするとフォルダが作成されるのですが、 その後に、 MkDir "D:\Test\Temp\" とすると、やはりエラーになってしまいます。 どのようにすれば、1つの処理の中で、複数階層のフォルダが作成できるのでしょうか? ちなみにVB6.0 SP5で、実際にはMkDir関数の引数は文字列変数です。 よろしくお願いします。

  • 泉州の道路標示について

    はじめまして。 大阪市内から泉大津市に引越しをしてきた者ですが、道路標示で気になる事がありました。 よく、旧26号線沿いの交差点で「××駅下り」という表示を見かけます。 これは、南海本線から海手にいった(下った)トコの交差点、と理解出来ました。 そして13号線沿いで「信太山駅上り」という交差点もみました。 これはJR信太山駅から山手にいった(上った)トコの交差点と分りました。 ところが、鳳駅近くの13号線沿い交差点は「鳳駅下り」なのです。 僕が思っていた基準では理解出来ず、??となってます。 そしてもう一つ、「下り」の読み方ですが、他では「サガリ」が多いのですが、「蛸地蔵駅下り」は「クダリ」でした。 これは、岸和田ではこういう読み方なのでしょうか? それとも、他に意味があるのでしょうか・・・ 以上2点、ご存知の方、教えて下さい。

  • エクセルのマクロ記述方法について教えてください。

    シート1に個人別商品購入状況リストがあります。 全データは50000行くらいです。商品は10種類ですが、各人の購入商品の種類はまちまちです。 ≪シート1≫ A列   B列   C列     D列 氏名  商品NO 購入個数  店舗 ---------------------- NNN 101    345    大阪     103     56    山口     108     45   富山          120    123     秋田 BBB  103     51    東京     125     69      横浜 UUU  101   134     和歌山      106     78      大阪      110    239      神戸 このデータをシート2に、1名1行となるよう転記します。 ≪シート2≫ A列   B列    C列     D列     E列     F列     G列 ・・・ 氏名   商品101 店舗    商品103   店舗    商品106    店舗       購入個数        購入個数       購入個数 ----------------------------------- NNN   345     大阪      56   山口 BBB                  51    東京 UUU   134    和歌山                    78    大阪 氏名が同じである間は商品番号の一致するデータのセルの値を取得して転記する、氏名が異なる場合はその氏名をA列にインプットし、・・という作業の繰り返しでしょうか。 if then elseif then として条件分岐し、loopで繰り返すという記述をすればよいかと思うのですが、考え方はあっていますでしょうか? お知恵を拝借できればありがたいです。

  • 別フォルダにあるエクセルファイルのF列値を、他ファイルにコピーさせたい

    仕事で、ある機器の検証をしています。 検証テストをするときに使用するファイルが、「Aフォルダ」に140ファイルあります。(ファイル名「101_○○○.xls~240_○○○.xls」) ↓ 検証テストは、1ファイルずつ複数人で行います。 ↓ 検証テストが終了したファイルは、Aフォルダから「B・C・Dフォルダ」のいずれかに切り取り移動されます。 ↓ ということで、移動されてしまったファイルは、Aフォルダ内を検索しても、#REF!と表示されてしまいます。 出来ていること (1)ファイルの所在検索マクロの組立て (2)Aフォルダ内にすべての140ファイルがあった場合のF列コピーマクロの組立て ※A,B,C,Dフォルダは、同フォルダ内、同階層にあります。 ※すべてのフォルダは、会社のネットワークドライブ上にあります。 ※Aフォルダ内のファイルは、最終的に0になります。 ※各ファイルがA・B・C・Dフォルダのいずれに保存されているかは「ファイル所在検索マクロ」を実行しないと分かりません。 可能がどうか知りたいこと!! ファイルの所在検索マクロから確認できたファイルの所在(ハイパーリンク付)&ファイル名から、ファイルを特定して、F列のコピーができるか? 「まとめのエクセルファイル」は、5シート構成です。 Sheet1…進捗&担当者一覧 Sheet2…101~240チェック_詳細結果 Sheet3…301~440チェック_詳細結果 Sheet4…501~640チェック_詳細結果 Sheet5…ファイル所在検索を求めるためのシート 上記の「Sheet2…101~240チェック_詳細結果」にマクロを入れたい。現状、このようになっています。  A   B   C  D  E  F  G  H …列 ファイル名→→ 101 102 103 104 105 106 … 求めたい値  1  OK  OK NG OK  NG ↓ 2  NG OK NG OK OK   ↓    3  OK OK NG OK OK   ↓    4  OK OK NG NG OK (行) ※列…ファイル名 ※行…各ファイルのF8:F57に表示される値 ※C列には、101_○○○.xlsのF8:F57の値をコピーしたいです。  D列には、102_○○○.xlsのF8:F57の値をコピーしたいです。 質問がややこしいですが、ぜひお願いします!!

  • ExcelVBA別フォルダにあるブックのコピー方法

    ExcelVBAでデータを条件に応じてコピーしたいと思っています。 同一階層に「VBAファイル.xls」「1_フォルダA」「2_フォルダB」「3_フォルダC」があります。 「1_フォルダA」と「2_フォルダB」には年代別に分かれたファイルがあります。 ファイルとフォルダの構造は以下の通りです。 VBAファイル.xls 1_フォルダA  ∟1999_ファイルA.xls  ∟2000_ファイルA.xls  ∟2001_ファイルA.xls  ∟2002_ファイルA.xls  ∟2003_ファイルA.xls  ∟2004_ファイルA.xls  ∟2005_ファイルA.xls  ∟2006_ファイルA.xls  ∟2007_ファイルA.xls  ∟2008_ファイルA.xls  ∟2009_ファイルA.xls  ∟2010_ファイルA.xls  ∟2011_ファイルA.xls  ∟2012_ファイルA.xls 2_フォルダB  ∟1999_ファイルB.xls  ∟2000_ファイルB.xls  ∟2001_ファイルB.xls  ∟2002_ファイルB.xls  ∟2003_ファイルB.xls  ∟2004_ファイルB.xls  ∟2005_ファイルB.xls  ∟2006_ファイルB.xls  ∟2007_ファイルB.xls  ∟2008_ファイルB.xls  ∟2009_ファイルB.xls  ∟2010_ファイルB.xls  ∟2011_ファイルB.xls  ∟2012_ファイルB.xls 3_フォルダC  ∟ファイルC_結果.xls 「VBAファイル.xls」では添付の画像のような「ActiveXコントロール」を設定しました。 コンボボックスで西暦を選択すると、選択した年を中心年として、 前後1年を合わせて合計3年がラベルに表示されます。 その年のファイルのデータが「ファイルC_結果.xls」にコピーされるようにしたいです。 例えば画像のように「2007」を選択した場合、 ・「2006_ファイルA.xls」のC7~C25を「ファイルC_結果.xls」のD7~D25にコピー ・「2007_ファイルA.xls」のC7~C25を「ファイルC_結果.xls」のE7~E25にコピー ・「2008_ファイルA.xls」のC7~C25を「ファイルC_結果.xls」のF7~F25にコピー ・「2006_ファイルB.xls」のC6~C24を「ファイルC_結果.xls」のH7~H25にコピー ・「2007_ファイルB.xls」のC6~C24を「ファイルC_結果.xls」のI7~I25にコピー ・「2008_ファイルB.xls」のC6~C24を「ファイルC_結果.xls」のJ7~J25にコピー というようにしたいです。 「ファイルC_結果.xls」のD/E/F列はファイルAのデータで、 D列は前年、E列は当年、F列は翌年 H/I/J列はファイルBのデータで、 H列は前年、I列は当年、J列は翌年の値をコピーして貼り付けたいです。 また、可能であれば「ファイルC_結果.xls」は原本なので、 値をコピーする際にファイル名が変更できればよりよいです。 いろいろ書いてしまい、うまく伝わっているか不安なのですが 処理するデータが多くとても困っています。 お知恵のある方、どなたか助けていただけますと幸いです。 よろしくお願いいたします。

  • 連続のフォルダ選択について教えて下さい

    フォルダの選択をShellで連続して行う時について教えてください。 下記のようなマクロ(途中までですが)がある時 Shellでフォルダ選択の画面が開かれてフォルダを選んで、という作業を9回連続しておこなっています。 この時、指定のフォルダ内には膨大の数のフォルダがあり、1回選択してフォルダ選択の画面が閉じられて 再度フォルダ選択の画面が開くと始めの位置戻ります。それは普通だと思うのですが 今回行いたいのは、1回目にフォルダを選択して、フォルダ選択の画面が閉じられて 再度フォルダ選択の画面が開いた時に、カーソルの位置を1回目に選んだフォルダの位置から開きたいということです。 1回目に選んだフォルダの階層ではなく、カーソルの位置です。指定のフォルダの中に1000以上のフォルダが入っているので いちいち一番上に戻られると非常に不便です。ネットでも調べてはみましたが、こんな特殊な事をしてる人がおらず 困っています。 もしできるようであれば、教えて下さい。 Sub 回転WARP() Dim CriteriaName(8), myBox, CriteriaDT(8) As Double, myFolder As Object, _ i As Long, myFolderName As String, NameEnd As String, ParentPath As String, _ OutputCell(9) As String, myIsDate(8) As Boolean, OutputRange As Range Dim r As Long OutputCell(0) = "B4:B14" '1つ目のフォルダー名を入力するセルのセル番号 OutputCell(1) = "D22:D32" '2つ目のフォルダー名を入力するセルのセル番号 OutputCell(2) = "P22:P32" '3つ目のフォルダー名を入力するセルのセル番号 OutputCell(3) = "D37:D47" '3つ目のフォルダー名の表わす日時が2つ目のフォルダー名の表わす日時から3時間以上経過しているか否かを表示するセルのセル番号 OutputCell(4) = "P37:P47" '11個前のフォルダー名の表わす日時が1つ目のフォルダー名の表わす日時から3時間以上経過しているか否かを表示するセルのセル番号 OutputCell(5) = "D52:D62" '11個前のフォルダー名の表わす日時が2つ目のフォルダー名の表わす日時から24時間以上経過しているか否かを表示するセルのセル番号 OutputCell(6) = "P52:P62" '3つ目のフォルダー名を入力するセルのセル番号 OutputCell(7) = "D67:D77" '3つ目のフォルダー名の表わす日時が2つ目のフォルダー名の表わす日時から3時間以上経過しているか否かを表示するセルのセル番号 OutputCell(8) = "P67:P77" '11個前のフォルダー名の表わす日時が1つ目のフォルダー名の表わす日時から3時間以上経過しているか否かを表示するセルのセル番号 OutputCell(9) = "D82:D92" '11個前のフォルダー名の表わす日時が2つ目のフォルダー名の表わす日時から24時間以上経過しているか否かを表示するセルのセル番号 NameEnd = "_IKK" '処理の対象とするフォルダー名から日時を表す部分を除いた字列 Set OutputRange = Range("R20:R30") '3つ目のフォルダー名~11個前のフォルダー名を入力するセル範囲 ParentPath = "C:\Users\" ParentPath = Cells(2, 2).Value Application.ScreenUpdating = False Application.Calculation = xlCalculationManual For i = 0 To 8 label1: Set myFolder = CreateObject("Shell.Application"). _ BrowseForFolder(0, i + 1 & "つ目のフォルダーを選択して下さい", _ 785, ParentPath & "") If myFolder Is Nothing Then myBox = MsgBox(i + 1 & "つ目のフォルダーが選択されていません。" _ & vbCrLf & "フォルダーの選択をやり直しますか?" & vbCrLf & vbCrLf _ & "[はい]:フォルダーの選択をやり直します" & vbCrLf _ & "[いいえ]:処理を中止してマクロを終了します", _ vbYesNo + vbExclamation, "フォルダー未選択") If myBox = vbNo Then GoTo sub_Exit Else With myFolder.Items.Item CriteriaName(i) = .Name myIsDate(i) = Left(CriteriaName(i), 14) & NameEnd = CriteriaName(i) _ And IsDate(Format(Val(CriteriaName(i)), "0000-00-00 00:00:00")) If myIsDate(i) Then CriteriaDT(i) = Val(CriteriaName(i)) Else myBox = MsgBox( _ "選択したフォルダーの名称はこのマクロで処理の対象としている形式の名称になっておりません。" _ & vbCrLf & "このマクロで処理の対象としているのは" & vbCrLf & vbCrLf _ & "yyyymmddhhmmss" & NameEnd & vbCrLf _ & "(4桁の西暦年&2桁の月&2桁の日&2桁の時刻&2桁の分&2桁の秒" & NameEnd & ")" _ & vbCrLf & vbCrLf & "という形式になっているフォルダー名だけです。" _ & vbCrLf & "フォルダーの選択をやり直しますか?" & vbCrLf & vbCrLf _ & "[はい]:フォルダーの選択をやり直します" & vbCrLf _ & "[いいえ]:このまま処理を続行しますが、日時の比較は行いません。" & vbCrLf _ & "[キャンセル]:処理を中止してマクロを終了します", _ vbYesNoCancel + vbExclamation + vbDefaultButton2, "無効な選択") Select Case myBox Case vbCancel GoTo sub_Exit Case vbNo Case Else GoTo label1 End Select End If ParentPath = Left(.Path, InStrRev(.Path, "\") - 1) End With End If Set myFolder = Nothing Next i

  • いつの間にか、Dドライブの中にmrt.exeというファイルが…

    お尋ねします。 いつの間にか、Dドライブ(自由に使えるハードディスク)に 「6798ead02af5774baea7ce4dc0df84ca」 という不可解な文字列のフォルダができており、中には、 「mrt.exe」という Microsoft Windows Malicious Software Removal Toolというアプリケーションファイルがいつの間にかできていました。 ウイルスでしょうか? 削除してしまって良いのでしょうか? 生成原因、対処法等、ご教授願います。

専門家に質問してみよう