[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ブック名とシート名の一覧リスト(目次)の作成』(ぽんぞう)
こんにちは。いつもお世話になってます。 過去ログ内でファイルやシート名単独の目次作成は載っていたのですが、両方を組み合わせることは可能でしょうか。
単独取得方法は、問題なく作動しています。 ブック名のみで表示は下記の通り。 [a] [b] [c] [d] [1] ブックリスト ケース数 行数 合格件数 [2] TK***-進捗管理仕様書-S***(品目マスタ相関チェックリスト).xls 6 6 [3] TK***-進捗管理仕様書-S***(品目マスタ相関チェックリスト).xls 12 12 [4] TK***-進捗管理仕様書-S***(品目マスタ相関チェックリスト(ロケーション別)).xls 6 6 [5] TK***-進捗管理仕様書-S***(品目マスタ相関チェックリスト(ロケーション別)).xls 12 12 [6] TK***-進捗管理仕様書-S***(品目マスタ相関チェックリスト(作業区別)).xls 6 6 [7] TK***-進捗管理仕様書-S***(品目マスタ相関チェックリスト(作業区別)).xls 12 12
[1],[2]は、同じブックの2シートを集計していることになりますが、どのシートだかわからないというのが欠点で挙げられました。 これを、 [a] [b] [c] [d] [1] ブックリスト ケース数 行数 合格件数 [2] TK***-進捗管理仕様書-S***(品目マスタ相関チェックリスト).xls\東京共通 6 6 [3] TK***-進捗管理仕様書-S***(品目マスタ相関チェックリスト).xls\品目マスタ相関チェックリスト 12 12 [4] TK***-進捗管理仕様書-S***(品目マスタ相関チェックリスト(ロケーション別)).xls\東京共通 6 6 [5] TK***-進捗管理仕様書-S***(品目マスタ相関チェックリスト(ロケーション別)).xls\品目マスタ相関チェックリスト 12 12 [6] TK***-進捗管理仕様書-S***(品目マスタ相関チェックリスト(作業区別)).xls\東京共通 6 6 [7] TK***-進捗管理仕様書-S***(品目マスタ相関チェックリスト(作業区別)).xls\品目マスタ相関チェックリスト 12 12
と、同じブック内に2シート対象となるものがあるのですが、ブック名のみだとどのシートを集計したのかが不明。(例は、sheet1に\東京共通、sheet2に品目マスタ相関チェックリスト(但し、このシート名もブックによっては異なる))
現在使用中のコードは、こちらです。 Private myList() Private n As Long
Sub SearchDir() Call ListAllBooks("C:\Documents and Settings\ponzou\デスクトップ\アプリ進捗資料用") 単体テスト仕様書_集計 End Sub
Private Sub ListAllBooks(myFolder) Dim fso As Object, fldr As Object, myFldrs As Object, myBooks As Object 'fso・fldr・myFldrs・myBooksをオブジェクトと宣言します bn = "*進捗管理仕様書*" 'bnに対象の進捗管理仕様書を格納します Set fso = CreateObject("Scripting.FileSystemObject") 'CreateObjectを使用し、fsoを格納 Set myBooks = fso.GetFolder(myFolder).Files '指定したフォルダ内配下にある全てのブックをmyBooksとして格納 Set myFldrs = fso.GetFolder(myFolder).SubFolders '指定したフォルダ内配下にある全てのフォルダをmyFldrsとして格納 For Each myBook In myBooks If myBook.Name Like bn Then n = n + 1 ReDim Preserve myList(1 To n) myList(n) = myFolder & "\" & myBook.Name End If Next For Each fldr In myFldrs ListAllBooks myFolder & "\" & fldr.Name Next End Sub
Private Sub 進捗管理仕様書_集計() Dim e, wb As Workbook, ws As Worksheet, a(), n As Long, fName As String ReDim a(1 To Rows.Count, 1 To 4) a(1, 1) = "ブックリスト" 'a列にブック名を作成する a(1, 2) = "ケース数": a(1, 3) = "行数" 'b列にケース数、c列に行数 a(1, 4) = "合格件数" 'd列に合格(文字列)件数 n = 1 For Each e In myList Set wb = Workbooks.Open(e) '変数wbにフォルダ名とブック名を格納 For Each ws In wb.Sheets If ws.Range("a4").Value = "生物販" Then 'a4セルに文字列が存在した場合 n = n + 1 With ws.Range("h5", ws.Range("h" & Rows.Count).End(xlUp)) 'h5を基点とする a(n, 1) = wb.Name '対象となったブック名 a(n, 2) = IIf(Application.Count(.Offset(, 12)) > 0, Application.Sum(.Offset(, 12)), 0) 'hから12列目のt列(ケース数にあたる)の集計 a(n, 3) = IIf(a(n, 2) = 0, Application.CountA(.Offset(1, 1)), "") 'ケース数がない場合は、i列の文字列(空白以外)をカウントする a(n, 4) = SumIfIf(.Offset(, 5), .Offset(, 12), "合格") 'm列の合格数 End With End If Next wb.Close False '保存せずにブックを閉じる Next ThisWorkbook.Sheets(1).Range("a1").Resize(n, 4).Value = a '集計ブックの数値処理 End Sub
Private Function SumIfIf(rng1 As Range, rng2 As Range, txt As String) As Long '合格をケース数に加算する Dim r As Range, i As Long For i = 1 To rng1.Count If rng1.Cells(i).Value = txt Then If rng2.Cells(i).Value = "" Then SumIfIf = SumIfIf + 1 Else SumIfIf = Application.Sum(SumIfIf, rng2.Cells(i).Value) End If End If Next End Function
myList(n) = myFolder & "\" & myBook.Nameの格納の変更でよかったでしょうか。 a(n, 1) = wb.Name '対象となったブック名 も変えることになりますよね...。
(ぽんぞう)
a(n, 1) = wb.Name '対象となったブック名 を a(n, 1) = wb.Name & "!" & ws.Name では? (seiya)
seiyaさん。 ありがとうございます! !でしたか..orz \を使ってました..。 確認できました。
(ぽんぞう)
"!" でも"\"でも表示だけですから、どちらでも... (seiya)
seiyaさん。 どちらでも作動するんですか..! おろ..どこが違っていたんでしょう..と思い返したら原因わかりました! wb & "\" & ws.Nameと掲示していたのかも知れません(汗) 動くわけないですね..w
(ぽんぞう)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.