- ベストアンサー
VBAでオートフィルタ後の計算
オートフィルタ後に35列(整数)、38列(小数)の集計を行ったところ、38列にて"実行時エラー'1004'が発生します。 For Each cel ~ next文に誤りがあると思われます。ご教授ねがいます。 Dim 合計金額 As Currency Dim 合計容量 As Single ' 合計金額 = 0 合計容量 = 0 ' ' 該当日付選択 選択日付 = InputBox("該当日付を入力してください。例:2008/09/01") ' 該当日付と作成年月日(Fielsd:37)をマッチング With Worksheets("明細") .Range("a1").AutoFilter Field:=37, Criteria1:=選択日付 Selection.Offset(1).Resize(Selection.Rows.Count - 1).Select ' Selection.Columns(35).SpecialCells(xlVisible).Select For Each cel In Selection 合計金額 = 合計金額 + cel.Value Next ' Selection.Columns(38).SpecialCells(xlVisible).Select For Each cel In Selection 合計容量 = 合計容量 + cel.Value Next End With
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>Selection.Offset(1).Resize(Selection.Rows.Count - 1).Select >■Selection.Columns(35).SpecialCells(xlVisible).Select >●Selection.Columns(38).SpecialCells(xlVisible).Select ●のSelectionは、■でSelectした範囲のことではありませんか? selectの必要性は感じませんが、Selectionを使いたければ。。 '---------------------------------------- For Each cel In Selection.Columns(35).SpecialCells(xlVisible) 合計金額 = 合計金額 + cel.Value Next ' For Each cel In Selection.Columns(38).SpecialCells(xlVisible) 合計容量 = 合計容量 + cel.Value Next '----------------------------------------- でどうでしょうか。
その他の回答 (2)
- hana-hana3
- ベストアンサー率31% (4940/15541)
>最終を『AI10000』で固定してよいのでしょうか? 構わないはずですよ。 不都合があるなら、どこかで最大行を取得して変数で設定してもかまいませんし。 Range("AI2:AI" & MaxRow ) http://www.niji.or.jp/home/toru/notes/8.html
お礼
ありがとうございます。すっきりしましたヽ(´▽`)/ 勉強になりました。
- hana-hana3
- ベストアンサー率31% (4940/15541)
subtotal関数で集計できますよ。 合計金額=Application.WorksheetFunction.Subtotal(9, Range("AI2:AI10000")) http://exinfo.biz/func/func_subtotal.shtml http://blog.livedoor.jp/sjkondou/archives/51274234.html
補足
ありがとうございます。 行数範囲が不特定な場合、 subtotal関数範囲設定で、最終を『AI10000』で固定してよいのでしょうか?
補足
ありがとうございます。無事、集計できました!! >selectの必要性は感じませんが・・ との事ですが、35列・38列それぞれを計算するためにselectを使用したのですが、使用目的が違うのでしょうか? もし、よろしければselect以外の方法をお教えください。