[[20190723200156]] 『複数ブックのSUM』(AI) ページの最後に飛ぶ

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

 

『複数ブックのSUM』(AI)

こんにちは。基本的な事もわからないのでを教えて下さい。
日報ファイルが30日分あり、月報ファイルにその合計を入力したいです。ブックをまたいでの繰り返しのSUMはどうやったら良いのでしょうか。
シート名は同じ、日報ファイルは全て同じフォルダに入っています。数値はA4から30行入っています。

日計
13
14
28
1
13
22
12
0
11

宜しくお願いします。  

< 使用 Excel:Excel2010、使用 OS:Windows10 >


こんばんは ^^ 一案ですが
コピーして形式を選択して貼り付けの演算に加算というのが有ったように
思います。
(隠居じーさん) 2019/07/23(火) 20:48

 各ファイルのSheet1のA4:A33までの合計をB列、A列にファイル名を抽出

 ということで

 Sub test()
     Dim myDir As String, fn As String, n As Long
     Const wsName As String = "Sheet1"  '<----要変更
     With Application.FileDialog(msoFileDialogFolderPicker)
         If .Show Then myDir = .SelectedItems(1) & "\"
     End With
     If myDir = "" Then Exit Sub
     Columns("a:b").Clear
     fn = Dir(myDir & "*.xls")
     Do While fn <> ""
         If fn <> ThisWorkbook.Name Then
             n = n + 1
             Cells(n, 1).Value = fn
             Cells(n, 2).Value = ExecuteExcel4Macro("sum('" & myDir & "[" & fn & "]" & wsName & "'!r4c1:r33c1)")
         End If
         fn = Dir
     Loop
 End Sub
(seiya) 2019/07/23(火) 20:54

合計を別のファイルに書き込むマクロを組み込みたいのですが、プログラムをどう書けば良いのかわからなくて。seiyaさんのは同じシートの別の列に書き込んでいくプログラムでしょうか?

元ファイル
ファイル1〜ファイル30

数値がA3からA33に入っていて、その合計を別の「集計ファイル」のA3からA33に入れる。
説明が下手ですいません。
(AI) 2019/07/23(火) 21:05


 新規ブックにコードを貼り付けて、一旦どこかに保存してから実行すれば何がどうなるのか目で見ればわかるはず。
(seiya) 2019/07/23(火) 21:18

思った通りの結果になりませんでした…
ファイルA,B,Cのsheet1の同じセル範囲にある合計を、ファイルDの同じセル範囲に書き込むにはどうしたら良いのでしょうか。
(AI) 2019/07/24(水) 14:22

質問者さんの真意は

ファイルDのSheet1のA3セルに

ファイルAのSheet1のA3セル+ファイルBのSheet1のA3セル+ファイルCのSheet1のA3セル

ファイルDのSheet1のA4セルに

ファイルAのSheet1のA4セル+ファイルBのSheet1のA4セル+ファイルCのSheet1のA4セル

・・・・・・・・・・以下A33 まで

の結果を出したいということでしょうか?

(渡辺ひかる) 2019/07/24(水) 14:40


 >思った通りの結果になりませんでした…
 あなたの「思った通り」って何ですか?
 理解できるように具体的に説明してください。

 ファイルD?って何ですか?

 さっぱりわかりません...
(seiya) 2019/07/24(水) 14:44

渡辺ひかるさん、その通りです!
各ファイルにある小計を、1つのファイルに合計として入れるVBAを教えて頂きたいのです。
(AI) 2019/07/24(水) 19:14

横からですけど(隠居じーさん)さんが、仰っている方法で出来そうにおもいます。
ループ処理はともかくとして、コピペする部分は、どのような命令を使えばよいか、マクロの記録で調べることができますから、一度試してみてはいかがでしょうか。

(もこな2) 2019/07/24(水) 19:30


 Dファイルにコードを貼り付けて実行

 Sub test()
     Dim myDir As String, fn As String, n As Long, i As Long
     Const wsName As String = "Sheet1"
     With Application.FileDialog(msoFileDialogFolderPicker)
         If .Show Then myDir = .SelectedItems(1) & "\"
     End With
     If myDir = "" Then Exit Sub
     Columns("a:b").Clear
     fn = Dir(myDir & "*.xls")
     Do While fn <> ""
         If fn <> ThisWorkbook.Name Then
             n = n + 1
             For i = 4 To 33
                Cells(i, 2).Value = Cells(i, 2).Value + Val(ExecuteExcel4Macro("'" & _
                    myDir & "[" & fn & "]" & wsName & "'!r" & i & "c1"))
            Next
         End If
         fn = Dir
     Loop
 End Sub

(seiya) 2019/07/24(水) 19:57


seiyaさんのプログラムは、ドライブの指定とか書き換えが必要な箇所は何処でしょうか?
その辺がわからないので、解説も入れて頂けると嬉しいです。
(AI) 2019/07/24(水) 20:04

 >ドライブの指定?
 どこ?

 >書き換えが必要な箇所は何処でしょうか?
 どこ?
(seiya) 2019/07/24(水) 20:06

 詳しい説明が無いから当初
 > 各ファイルのSheet1のA4:A33までの合計をB列、A列にファイル名を抽出
 という条件でコードを作成。

 どのフォルダにファイルがあるのかわからないから、フォルダを選択させるコードを提示。
 抽出先の詳しい指定も無いので、こっちで勝手に想定。

 コードを実行して、ここをこうし欲しい、ここが違う等のコメントがあると思ったけど、

 >思った通りの結果になりませんでした

 実際にシートを見てるのはあなただけなのです。
 他の人に正確に伝える努力をするのは質問者の仕事ではないのですか?
(seiya) 2019/07/24(水) 20:25

(もこな2) 2019/07/24(水) 19:30
↑の補足(というか追加)

箸休めに提供します。興味があればステップ実行して研究してみてください。
(実データを用意してテストはしてません。コンパイルエラーにならないことのみチェック済です)

>日報ファイルは全て同じフォルダに入っています。
>シート名は同じ、数値はA4から30行入っています。

↑の条件に加え、
・マクロは月報ファイルに記述
・月報ファイルも同じフォルダに入っている
・フォルダ内に日報ファイル、月報ファイル以外のExcelブックは入っていない
という場合、で隠居じーさんさんがおっしゃってることをコード化するとこんな感じではないでしょうか。

    Sub 研究用()
        Dim ブック名 As String

        Stop 'ブレークポイントの代わり

        ブック名 = Dir(ThisWorkbook.Path & "\" & "*.xls?")

        'ループ処理
        Do Until ブック名 = ""
            If ブック名 <> ThisWorkbook.Name Then
                With Workbooks.Open(ThisWorkbook.Path & "\" & ブック名)

                    'コピー
                    .Worksheets("同じ").Range("A4").Resize(30).Copy

                    '値 加算で貼付
                    ThisWorkbook.Worksheets("同じ").Range("A4").PasteSpecial _
                        Paste:=xlPasteValues, Operation:=xlAdd

                    '開いたブックを閉じる
                    .Close

                End With
            End If
        Loop

    End Sub

なお、Dir関数の場合、ネットワークフォルダなどでフォルダ階層が深い場合、うまく動作しないので、別プランを考える必要があります。

(もこな2) 2019/07/24(水) 20:38


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.