[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数のExclファイルの特定行を別ファイルに順次コピー』(RaRa)
同一フォルダ内に複数の同一形式のExcelファイルが入っています。
各Excelファイルには複数のシートがありますが、その中の「個人別集計結果」というシートの6行目を「まとめ.xls」の「部門別集計結果」というシートの7行目以降に順次コピーしていきたいと思います。
例えば、aaa.xls、bbb.xls、ccc.xlsの3つのExcelファイルがあり、それぞれ「個人別集計結果」というシートがあります。
まとめ.xlsの「部門別集計結果」のシートの
7行目にaaa.xlsの「個人別集計結果」の6行目を、
8行目にbbb.xlsの「個人別集計結果」の6行目を、
9行目にccc.xlsの「個人別集計結果」の6行目を、
コピーしたいのです。
実際にはコピー元のExcelファイルは300個程度あり、全て「まとめ.xls」と同一のフォルダ内に格納されています。
良い方法があればご教示ください。
Excel2003
WindowsXP
とりあえず、単純に動かせるサンプルを載せてみます。 詳しくはFileSystemObjectをネットで調べてみてください。 その他のやり方としてはDir関数をループさせる方法もあります。
Sub test()
Dim lngRowCount As Long, wb As Object
Application.ScreenUpdating = False
lngRowCount = 7
With CreateObject("Scripting.FileSystemObject")
On Error Resume Next
For Each wb In .GetFolder(ThisWorkbook.Path).Files
If .GetExtensionName(wb.Path) = "xls" And _
wb.Name <> ThisWorkbook.Name Then
With Workbooks.Open(wb.Path)
.Worksheets("個人別集計結果").Rows(6).Copy _
ThisWorkbook.Worksheets("部門別集計結果").Rows(lngRowCount)
If Err.Number = 0 Then lngRowCount = lngRowCount + 1
.Close False
End With
End If
Next wb
On Error GoTo 0
End With
Application.ScreenUpdating = True
End Sub
(momo)
以前に似た処理を書いたっけなぁと思い出したのでペッタリ。
[[20050210100639]]『複数のファイルを1つのファイルに集約』(香織)
やろうとしている処理内容は違いますが、 同じ場所にあるxlsファイルを全て処理するって部分が同じ。 >その他のやり方としてはDir関数をループさせる方法もあります。 の例として参考になれば。 (ご近所PG)
(momo)さん&(ご近所PG)さん、解決策のご提供ありがとうございました。
お礼が遅くなりすみません。
お二人のモジュールを参考に以下のようなモジュールを作成してみました。
Sub 複数のブックの6行目をある一つのブックの7行目以降に追記する()
Dim strPath As String
Dim strBookName As String
Dim TargetBook As Workbook
Dim OriginalSheet As Worksheet
'指定した場所にあるxlsファイルについて処理
strPath = ThisWorkbook.Path '自分自身と同じ場所とする
strBookName = Dir(strPath & "\*.xls") 'ファイル名取得
lngRowCount = 7
'対象ファイルが存在する限り処理
Do While strBookName <> ""
If ThisWorkbook.Name <> strBookName Then '自分自身じゃないなら
'そのブックを開く
Set TargetBook = Workbooks.Open(strPath & "\" & strBookName)
'開いたブックの全てのシートを処理
Worksheets("個人集計結果").Rows(6).Copy
ThisWorkbook.Worksheets("個人集計結果のまとめ").Rows(lngRowCount).PasteSpecial Paste:=xlValues
lngRowCount = lngRowCount + 1
TargetBook.Close
Set TargetBook = Nothing
End If
strBookName = Dir '次のファイル
Loop
Exit Sub
End Sub
お蔭様で、これで何とか思うような処理ができたのですが、一つ問題が残っています。
Pasteの実行時に毎回(つまりブック数分)、
「クリップボードに大きな情報があります。…クリップボードに保存しますか?…」
とメッセージが出て、毎回「はい」をクリックしなければなりません。
このメッセージを省略する方法、あるいはこのような状況を回避する方法があったら教えてください。
よろしくお願いします。
>ThisWorkbook.Worksheets("個人集計結果のまとめ").Rows(lngRowCount).PasteSpecial Paste:=xlValues
の後に、
Application.CutCopyMode = False
を入れてみてください。
(momo)
(momo)さん、早速に解決策を授けてくださりありがとうございます。
お蔭様で思うようにできました。
大感謝です!
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.