[[20150730141659]] 『複数のエクセルファイルのデータを1つのファイルax(わんこ) ページの最後に飛ぶ

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

 

『複数のエクセルファイルのデータを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


1.G列、H列は可能であれば式のままにしたいです。
2.D列に「来季」と記入があると、H列の計算式によってH列に数字を反映しないようになります。
 E列は、数字が入ります。
3.統合元各ブックはクラウドからエクセルをDLして、統合ブックと同じフォルダに格納・集計するつもりです。
4.統合ブックにプログラムを書いて、同じフォルダ内から数字を持ってこようとしています。

説明が上手くできず、申し訳ありません。。
(わんこ) 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.