[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数のエクセルファイルのデータを1つのファイルに統合したい』(わんこ)
A B C D E F G H I J K 3 No 受注予定 売上予定 来期 予定 実績金額 予算残額(1) 予算残額(2) 確度 ユーザー 案件名 L M N O P 備考 理由など 担当 KGI 部署 4 ========================== 空ける ================================================ 5 6 7
ファイル名:"アルファベット3文字+_+案件詳細" 例)「ABC_案件詳細」
ファイル数:8ファイル
G列 計算式(G5から):=G4-F5
H列 計算式(H5から):=H4-IF(D5="",F5,0)
上記のようなフォーマットのエクセルファイルが8個あります。
同じフォーマットのファイルを作って、内容を1ファイルに統合したいです。
統合した後は、並べ替えをしたいです。
並び替え、優先?@:I列 確度
並び替え、優先?A:C列 売上予定
VBA初心者のため、何から考えればいいのかわかりません。
お知恵を貸していただければ嬉しいです。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
1.統合側ブックのシートのG列、H列は式のままにしたいのですか? 値でもいいのですか? (式のままでは、並び替えによって式が成立しなくなりますので値でないと具合悪いと思いますが) 2.D列、E列のタイトルがちょっとわかりにくいのですが、実際にはどうなっているのですか? 3.統合元各ブックは、どこにありますか?
追加
4.統合ブックは、マクロブックですか?それとも、別の、xlsxブックですか?
(β) 2015/07/30(木) 19:25
説明が上手くできず、申し訳ありません。。
(わんこ) 2015/08/07(金) 11:43
>>G列、H列は可能であれば式のままにしたいです。
コメントしたように、それは具合悪いというか不可能でしょう。 セルの計算式は、その行と、1つ上の行を相手にしています。並び替えによって、元々参照していた1つ上の行が 別の場所にいってしまい、並び替え後の参照が、並び替え後の1つ上の行を参照することになりますから。
それでも式を残したいのですか?
(β) 2015/08/07(金) 12:02
追加で
たとえば元シートの G5 が G4 - F5 ということですけど、4行目は空白行なんですよね? なら G4 は値としては ゼロですよね?
それと、集約シートのレイアウトは、やはりタイトル行が3行目で、1行空白行があって、5行目から連続して 各ブックのデータラインを転記するということでいいのですか?
(β) 2015/08/07(金) 13:48
まぁ、とりあえずたたき台として。
誤解あれば指摘願います。 転記の際、式のままではコメントした通り、不具合となりますので、値にしています。
Sub Sample() Dim tSh As Worksheet Dim fSh As Worksheet Dim fPath As String Dim fName As String Dim pos As Range
Application.ScreenUpdating = False
Set tSh = ThisWorkbook.Sheets(1) tSh.Range("A1", tSh.UsedRange).Offset(4).ClearContents fPath = ThisWorkbook.Path & "\" fName = Dir(fPath & "*_案件詳細.xlsx")
Do While fName <> "" Set fSh = Workbooks.Open(fPath & fName).Sheets(1) If pos Is Nothing Then Set pos = tSh.Range("A5") Else Set pos = tSh.Range("A" & Rows.Count).End(xlUp).Offset(1) End If With fSh.Range("A1", fSh.UsedRange) pos.Resize(.Rows.Count, .Columns.Count).Value = .Offset(4).Value End With fSh.Parent.Close False fName = Dir() Loop
tSh.Sort.SortFields.Clear tSh.Sort.SortFields.Add Key:=Columns("I"), Order:=xlAscending tSh.Sort.SortFields.Add Key:=Columns("A"), Order:=xlAscending tSh.Sort.SortFields.Add Key:=Columns("B"), Order:=xlAscending tSh.Sort.SortFields.Add Key:=Columns("C"), Order:=xlAscending
With tSh.Sort .SetRange tSh.Range("A1", tSh.UsedRange).Offset(4) .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
End Sub
(β) 2015/08/07(金) 14:08
↑ 集計元ブック、集計先(マクロ)ブックともにシートは最初のシート(いちばん左のシート) また、マクロブック側のシートには、あらかじめタイトル行や必要な書式設定がなされているという前提です。
(β) 2015/08/07(金) 15:18
式が適切かどうか、心もとないところもありますが、値ではなく式は式で転記。 また、転記先シートはマクロ内でマクロブックの先頭に作り出します。 で、そのタイトルや書式等はフォルダ内の最初のブックのシートの設定を継承します。
Sub Sample2() Dim tSh As Worksheet Dim fSh As Worksheet Dim fPath As String Dim fName As String Dim pos As Range Dim done As Boolean
Application.ScreenUpdating = False
fPath = ThisWorkbook.Path & "\" fName = Dir(fPath & "*_案件詳細.xlsx")
Do While fName <> "" Set fSh = Workbooks.Open(fPath & fName).Sheets(1) If Not done Then fSh.Copy before:=ThisWorkbook.Sheets(1) Set tSh = ActiveSheet done = True Else Set pos = tSh.Range("A" & Rows.Count).End(xlUp).Offset(1) With fSh.Range("A1", fSh.UsedRange) .Offset(4).Resize(.Rows.Count, .Columns.Count).Copy pos End With End If fSh.Parent.Close False fName = Dir() Loop
tSh.Sort.SortFields.Clear tSh.Sort.SortFields.Add Key:=Columns("I"), Order:=xlAscending tSh.Sort.SortFields.Add Key:=Columns("A"), Order:=xlAscending tSh.Sort.SortFields.Add Key:=Columns("B"), Order:=xlAscending tSh.Sort.SortFields.Add Key:=Columns("C"), Order:=xlAscending
With tSh.Sort .SetRange tSh.Range("A1", tSh.UsedRange).Offset(4) .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
End Sub
(β) 2015/08/07(金) 17:11
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.