[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数ブック、シートの特定のセル(行)を別の1つのブックに集約』(まんぷく)
Excel2007
Windows Vista
ある製品の検品の日ごとの集計を行うため
検品チーム(A〜E)毎に集計をとっております。
1チームで1つのブック(ブック名は検品A.xls〜検品E.xls)
で管理しており、その中に検品した製品毎に同じ雛形でシート別
(シート名は@〜I※10種類ある場合。日によって製品・数は違うが
番号と製品はチームで統一)で分けて管理しております。
1日の終わりに各チーム毎のPCで入力して貰った
ブック(検品*.xls)を集めてデスクトップ上のデータ置き場フォルダに格納します。
デスクトップ上に集計.xlsという別のブックを用意して
中のシートに予め容易された集計ボタンなどを押したら
製品毎(シート名は対応した同じ@〜I)にシート別に分けて
各チームのブックの各シートにある総数・良品・各不良項目の合計値が
記入されているセル(行)の値のみを集計ブックの各製品毎のシートのセル(行)の
1番上からチーム毎に順番に貼り付けていくようなマクロは可能でしょうか?
可能、不可能でと答えると、可能でしょうねぇ。 しかし、お聞きになりたいのは実際のコードなのかな?と思います。
まずはチームごとに統一してある表のフォーマットはどうなっているか? >各チームのブックの各シートにある総数・良品・各不良項目の合計値が 記入されているセル(行) ↑↑ここのセルは固定なのか、毎回変わるのか?など 集計ブックのフォーマットが決まっているかなど(A列は○○で、B列は△△で、) 掲載されたら分かり易いと思いますが。 (通行人)
ブック:検品A
シート:@
列C 列F 列G 列H 〜 列P
行36 総数 良品 不良合計 ○○○ 〜 ×××
ブック:集計
シート:@
列B 列C 列D 列E 〜 列L
行3 総数 良品 不良合計 ○○○ 〜 ×××
行4 総数 良品 不良合計 ○○○ 〜 ×××
行5 総数 良品 不良合計 ○○○ 〜 ×××
行6 総数 良品 不良合計 ○○○ 〜 ×××
行7 総数 良品 不良合計 ○○○ 〜 ×××
でシートは4種類でCまでとなります。
集計シートの行と列は仮です。
あくまで全チームの製品毎の合計を集計したい考えです。
日ごとの検品報告であれば
上記の説明では、日にちの特定はどこで行っているの
検品報告ブック名
検品A.xls
と有りますが、
検品A(06月01日).xls
のようにブック名に月日がある方が検索しやすい
収納フォルダーが日別名であるなら別ですが。
複数ブックから集計ブックにまとめるに当たり
・製品別
・検品チーム別
・1カ月まとめ、チーム別、製品別
・不良率
など現状行っている整理の全てを書かれたほうがよいです
通常最低限の要望を聞いて、ある程度出来上がると、これもついでに
と希望を小出しにする例も有ります。
目で見て、どのような集計結果を希望しているのか、分かりやすく
まとめていただけますか。
現状では、文字から結果を考えあぐねてしまいます。
他サイトですが、最近同様な投稿がありましたから参考まで
http://officetanaka.com/patio/patio.cgi?mode=view&no=3297
(asami)
現状は各検品ブックの各製品シート毎の合計の値の行の所を
コピーして集計ブックの各製品のシートに上から1行ずつペーストして
一番下の行で合計が出るようにしてます。
5チームで10製品あるとすれば50回コピー&ペーストを繰り返してます。
終わった後に集計120605.xlsという名前をつけて1日ごとに保存してます。
各検品ブックは、集計シートにコピーが終われば数値をクリアして
翌日にまたそこに入力シートとして使用してます。
50回コピー&ペーストしている部分を自動化出来ればと思い投稿いたしました。
「マクロの記録」の操作が分からないときは、「EXCEL マクロの記録」
で検索をかければ解説がたくさん出てきます。
(asami)
Sub test()
'
' test Macro
'
'
Selection.Copy Windows("集計用.xls").Activate Range("C1:I2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Windows("全検A.xls").Activate ActiveWindow.SmallScroll Down:=25 Range("C36:P37").Select Application.CutCopyMode = False Selection.Copy Windows("集計用.xls").Activate Range("C5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SmallScroll Down:=28 Range("C36:P37").Select Application.CutCopyMode = False Selection.Copy Windows("集計用.xls").Activate Range("C7").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SmallScroll Down:=28 Range("C36:P37").Select Application.CutCopyMode = False Selection.Copy Windows("集計用.xls").Activate Range("C9").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SmallScroll Down:=26 Range("C36:P37").Select Application.CutCopyMode = False Selection.Copy Windows("集計用.xls").Activate Range("C11").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SmallScroll Down:=24 Range("C36:P37").Select Application.CutCopyMode = False Selection.Copy Windows("集計用.xls").Activate Range("C13").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Windows("全検A.xls").Activate ActiveWindow.Close Windows("全検B.xls").Activate ActiveWindow.Close Windows("全検C.xls").Activate ActiveWindow.Close Windows("全検D.xls").Activate ActiveWindow.Close Windows("全検E.xls").Activate ActiveWindow.Close End Sub
(asami)
前提として下記作業をしてください
@Dドライブにフォルダー作成
”検品集計”:ここに”集計用.xls”を収納
その下に”検品結果”:ここに”全検A.xls”収納
”集計用.xls”の標準モジュールに下記をコピペしてください
シート1にボタンを1個作り、Com1 を呼び出してください
・”全検*”Bookを開いて検査結果データを転記する
起動しているので、集計後他のフォルダーへ異動可能
・”全検*”Bookを開かず検査結果を集計する
処理速度は速いがデータ読み込みのみ
その応用をお任せします、当方はこれにて
(asami)
例1:検品ブックを開き集計
Sub Com1()
Dim md As String
md = Mid(Date, 6, 5) & "日" Ans = MsgBox(md & "集計開始", vbOKCancel, "実行の確認")
If Ans = vbOK Then Application.ScreenUpdating = False ' 画面更新停止
Shnam_Get 検品集計 Application.ScreenUpdating = True ' 画面回復
End If End Sub
Sub 検品集計() Dim Team() As String Dim i As Long, j As Long, k As Long Dim Bks Dim t As Long, s As Long Dim fold As String Dim Pat As String Dim Buf As String Dim md As String
Bks = ActiveWorkbook.Name ' 主ファイル名 Pat = ActiveWorkbook.Path ' パス
t = 5 ' 検品チーム数 s = 10 ' 検品結果シート数 fold = Pat & "\" ' フォルダ名
ReDim Team(t, 2) md = Mid(Date, 6, 5) & "日" ' 月日 Mid(md, 3, 1) = "月"
For i = 1 To s Worksheets(i).Range("C5:P14").ClearContents Worksheets(i).Range("A1").Value = md Next
With Worksheets(1) ' チーム名、Book名 配列取得 For i = 1 To t Team(i, 1) = .Range("A" & i + 29).Value Team(i, 2) = Team(i, 1) & ".xls" Next i End With
Windows(Bks).Activate
Buf = Dir(fold & "検品結果\*.xls") ' フォルダー内検品結果ファイルを取得
Do While Buf <> "" For k = 1 To t ' Book名にチーム名が有るか If InStr(Buf, Team(k, 1)) > 0 Then ' チーム名有り Workbooks.Open Filename:=fold & "検品結果\" & Buf Windows(Buf).Activate
For i = 1 To s ' Book間シートコピー
Application.Workbooks(Buf).Worksheets(i).Range("C36:P37").Copy _ Application.Workbooks(Bks).Worksheets(i).Range("C" & k * 2 + 3 & ":P" & k * 2 + 4)
Next Windows(Buf).Activate ActiveWorkbook.SaveCopyAs fold & "検品結果\" & md & Buf ' 集計済みフォルダヘ保存
ActiveWorkbook.Close Windows(Bks).Activate End If
Next k
Buf = Dir() Loop Windows(Bks).Activate For i = 1 To s Worksheets(i).Range("A2:P14").Borders.LineStyle = xlContinuous ' 罫線枠 Next ActiveWorkbook.SaveCopyAs fold & "集計結果\" & md & Bks ' 集計済みフォルダヘ保存
End Sub
Sub Shnam_Get() Dim s As Long, i As Long s = Worksheets.Count For i = 1 To s Range("B" & 29 + i) = Worksheets(i).Name Next End Sub
Sub Fold_Up() ' 検品集計処理フォルダー作成
Dim d As String Dim m As String Dim y As String
m = Mid(Date, 5, 2) ' 月 y = Mid(Date, 1, 4) ' 年
d = "D:\検品集計 " ' フォルダ"
Make_Fold Left(d, 7) ' 最初に主フォルダー作成 d = Left(d, 8) ' 下位フォルダー Make_Fold d & "\検品済み" ' Make_Fold d & "\集計結果" ' Make_Fold d & "\集計結果\" & m '
End Sub
'================<< フォルダー作成 >>=======
' 機能説明 :有る:0 無い:1
Sub Make_Fold(d As String)
Dim er As Long
On Error GoTo ERTR
ii: MkDir d ' D:
Exit Sub ' 正常作成されれば ER=0
ERTR: '===============<< エラー処理 >>==============
If Erl = ii Then ' エラー起こしたラベルがiiなら er = 1 ' フォルダー作成済みフラグ
Resume Next ' 次の行へ復帰 End If
End Sub
Sub Com1()
Dim md As String
md = Mid(Date, 6, 5) & "日" Ans = MsgBox(md & "集計開始", vbOKCancel, "実行の確認")
If Ans = vbOK Then Application.ScreenUpdating = False ' 画面更新停止
Shnam_Get 検品集計 Application.ScreenUpdating = True ' 画面回復
End If End Sub
Sub 検品集計() Dim Team() As String Dim i As Long, j As Long Dim k As Long, x As Long, y As Long Dim Bks Dim t As Long, s As Long Dim fold As String Dim Pat As String Dim Buf As String Dim md As String Dim Sh() As String
Bks = ActiveWorkbook.Name ' 主ファイル名 Pat = ActiveWorkbook.Path ' パス
t = 5 ' 検品チーム数 s = 10 ' 検品結果シート数 fold = Pat & "\" ' フォルダ名
ReDim Team(t, 2) ReDim Sh(s) md = Mid(Date, 6, 5) & "日" ' 月日 Mid(md, 3, 1) = "月"
For i = 1 To s Worksheets(i).Range("C5:P14").ClearContents Worksheets(i).Range("A2:P14").Borders.LineStyle = xlContinuous ' 罫線枠 Worksheets(i).Range("A1").Value = md Sh(i) = Worksheets(1).Range("B" & i + 29).Value Next
With Worksheets(1) ' チーム名、Book名 配列取得 For i = 1 To t Team(i, 1) = .Range("A" & i + 29).Value Team(i, 2) = Team(i, 1) & ".xls" Next i End With
Windows(Bks).Activate
Buf = Dir(fold & "検品結果\*.xls") ' フォルダー内検品結果ファイルを取得
Do While Buf <> "" For k = 1 To t ' Book名にチーム名が有るか If InStr(Buf, Team(k, 1)) > 0 Then ' チーム名有り For i = 1 To s
With Worksheets(i)
For y = 0 To 1 ' 売上データコピー For x = 3 To 16 .Cells(k * 2 + y + 3, x).Value = ExecuteExcel4Macro("'" & fold & "検品結果\" & "[" & Buf & "]" & Sh(i) & "'!R" & 36 + y & "C" & x) Next Next
End With Next
End If
Next k
Buf = Dir() Loop
Windows(Bks).Activate For i = 1 To t ' 検品チームBook 起動 ' Workbook.Close Filename:=Team(i, 2) Next i
End Sub
Sub Shnam_Get() Dim s As Long, i As Long s = Worksheets.Count For i = 1 To s Range("B" & 29 + i) = Worksheets(i).Name Next End Sub Sub Fold_Up() ' 検品集計処理フォルダー作成
Dim d As String Dim m As String Dim y As String
m = Mid(Date, 5, 2) ' 月 y = Mid(Date, 1, 4) ' 年
d = "D:\検品集計 " ' フォルダ"
Make_Fold Left(d, 7) ' 最初に主フォルダー作成 d = Left(d, 8) ' 下位フォルダー Make_Fold d & "\検品済み" ' Make_Fold d & "\集計結果" ' Make_Fold d & "\集計結果\" & m ' End Sub
'================<< フォルダー作成 >>=======
' 機能説明 :有る:0 無い:1
Sub Make_Fold(d As String)
Dim er As Long
On Error GoTo ERTR ii: MkDir d ' D:
Exit Sub ' 正常作成されれば ER=0
ERTR: '===============<< エラー処理 >>==============
If Erl = ii Then ' エラー起こしたラベルがiiなら er = 1 ' フォルダー作成済みフラグ
Resume Next ' 次の行へ復帰 End If End Sub
(asami)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.