[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA 複数シート集計・連続実行』(hideminn)
マクロ初心者です。
【シート】が30シートあり、DBから❶のコードで各シートにデータ抽出→集計(合計)しています。
【シート1】に連続実行のボタンを作成し、
❷の連続実行で各シートにデータは抽出されますが
合計値が【シート1】に反映されてしまいます。
合計値のコードがWorksheetになっているからでしょうか。。。
連続実行で各シートの【J列最後尾+1】のセルに合計値を出したいのですが
ご教示頂けますでしょうか。
よろしくお願いいたします。
❶各シートのプログラム
Sub リンゴ()
Dim WS2 As Worksheet
Dim fR As Range, CopyTo As Range
Dim c
Dim Criteria: Criteria = Array("820678")
Set WS2 = Worksheets("リンゴ")
WS2.UsedRange.ClearContents
Set CopyTo = WS2.Range("A3")
Set fR = Worksheets("DB").Range("A3").CurrentRegion
fR.AutoFilter
For Each c In Criteria
fR.AutoFilter 11, c
fR.Copy CopyTo
fR.AutoFilter
Set CopyTo = WS2.Cells(Rows.Count, 1).End(xlUp).Offset(1)
With Range("j4")
.End(xlDown).Offset(1, 0) = _
"=SUM(" & Range(.Address, .End(xlDown)).Address(False, False) & ")"
End With
Next
End Sub
❷連続実行
Sub 連続実行()
Call リンゴ
Call みかん
call いちご
・
・
・
End Sub
< 使用 Excel:Excel2013、使用 OS:Windows10 >
> With Range("j4")
を With WS2.Range("j4")
にしてみては?
(渡辺ひかる) 2019/09/27(金) 15:33
ご回答くださいましてありがとうございます。
試してみたのですが、
??Rangeメゾットは失敗しました??とのエラーがでしまいます。
With WS2.Range("j4")
.End(xlDown).Offset(1, 0) = _
"=SUM(" & Range(.Address, .End(xlDown)).Address(False, False) & ")"
End With
(hideminn) 2019/09/27(金) 16:36
ということは、
0)作業開始(プログラム始め)
1)りんごというシートに820678という番号のものを(どのブックのどのシートのどのセル範囲から?)抽出して転記
2)みかんというシートに??????という番号のものを抽出して転記
・
・
以下シートがある限り繰り返し
という風に命令したいのですよね?
ということは、
1)元の表はどのブックのどのシートのどの範囲?
2)「りんご」などの抽出先のシートはどのブック?
3)りんごと820678という番号の相関関係は?
等の情報を明示する必要があると思います。
まずは、メインのプロシージャを上記のように書いて、
子プロシージャには変わる部分を変数で受けて、
抽出&コピーをする役割(あるいは機能)だけを与えるように、
考えてみてください。
とりあえず、まともに動かなくてもいいと思うので、
前提条件の整理と作業の流れを今一度整理して、
思った通りに書いてみて、それらの情報&コードをここに提示して、
どなたかに添削していただくという方向で話を進めていくというのはどうでしょうか?
(まっつわん) 2019/09/27(金) 16:41
With句の中を以下にしてください
With WS2.Range("j4")
.End(xlDown).Offset(1, 0) = _
"=SUM(" & WS2.Range(.Address, .End(xlDown).Address).Address(False, False) & ")"
End With
それと
Criteria = Array("820678") で 配列にしてループする必要があるのですか?
他のプロシージャでは複数指定しているとか?
(渡辺ひかる) 2019/09/27(金) 17:14
お陰様でできました!
分かりにくい質問にご回答くださりありがとうございます。
("820678") はDBシートの【リンゴ】に属するコード番号で
このコード番号で抽出しています。
とても助かりました。ありがとうございます。
(hideminn) 2019/09/27(金) 17:34
Sub リンゴ()
Dim 貼付先 As Range
'▼リンゴシートの話
With Worksheets("リンゴ")
.UsedRange.ClearContents
Set 貼付先 = .Range("A3")
End With
'▼DBシートの話
With Worksheets("DB")
'▼オートフィルタ強制解除
.AutoFilterMode = False
'▼A3セルを含む表範囲にオートフィルタを設定して、11列目を"820678"で抽出
.Range("A3").AutoFilter Field:=11, Criteria1:="820678"
'▼抽出されているものをタイトル行ごとコピペ
.AutoFilter.Range.Copy 貼付先
End With
'▼アクティブシートの話
With ActiveSheet.Range("j4")
.End(xlDown).Offset(1) = _
"=SUM(" & Range(.Cells, .End(xlDown)).Address(False, False) & ")"
End With
End Sub
こんな感じになるから、ループする必要がないっていってるんだとおもいますよ。
(もこな2 ) 2019/09/27(金) 18:27
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.