[[20070625112334]] 『ブック名とシート名の一覧リスト(目次)の作成』(ぽんぞう) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ブック名とシート名の一覧リスト(目次)の作成』(ぽんぞう)
 こんにちは。いつもお世話になってます。
 過去ログ内でファイルやシート名単独の目次作成は載っていたのですが、両方を組み合わせることは可能でしょうか。

 単独取得方法は、問題なく作動しています。
 ブック名のみで表示は下記の通り。
 		[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.