[[20110203101718]] 『可視セルでのSumIF』(Taro) ページの最後に飛ぶ

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

 

『可視セルでのSumIF』(Taro)

 VBAでオートフィルタがかかったあとに表示セル範囲でのSUMIFを
 実行したくて下記コードにしましたが WokseetFunction.SumIFのところで
 エラーになってしまいます。
 可視セル範囲でのSumIfはどのように記述すればいいのでしょうか?
 ご教授 お願いします。(XP_2003)

 Private Sub Worksheet_Change(ByVal Target As Range)
   Set MyWk = ThisWorkbook.Sheets("Sh1")  
    With MyWk
         EndRw = .Cells(Rows.Count, 3).End(xlUp).Row
         If Intersect(Target, .Range("P9:P" & EndRw)) Is Nothing Then Exit Sub
         Application.EnableEvents = False
        '表示データ合計(K_Flg)
        .Range("L7").Value = WorksheetFunction.SumIf(.Range("P9:P" & EndRw).SpecialCells(xlCellTypeVisible), "K", .Range("L9:L" & EndRw).SpecialCells(xlCellTypeVisible))
         Application.EnableEvents = True
   End With
End Sub


 SumIfで複数範囲は出来ませんよね。
 ワークシート関数なので、セルに書く関数で出来ない事はほとんど出来ません。
 SubTotalにしてもSumIfはできませんので。

 データがどのようなデータかわからないので確実な事は言えませんが
 P列が"K"かどうかのSUMIFをするのなら、せっかくオートフィルタが掛かっているのだから
 P列がKの条件で絞り込んだ状態でSUBTOTALのSUM(非表示除く)で集計してみては?

 あとは、VBAですからループ処理で足しこんで行く事でも可能ですし
 SpecialCellsのAreaごとにSumIfでも良いかもしれません。
 方法は色々あると思います。
 (momo)

 素直に P列で "K" をオートフィルタで抽出してからSUBTOTAL関数でL列を集計すれば
よいのではないでしょうか。
表示されている行だけ集計だから、とくに最終行も求める必要はないだろうし。
(みやほりん)(-_∂)b

 みやほりんさんへ。
 ryu○○○do 覗いて下さい。

 業務連絡失礼しましたm(__)m
 
(純丸)(o^-')b

 まずお礼が遅くなって申し訳ありません。 
(momo)さま
 >SumIfで複数範囲は出来ませんよね。
 言われてみればそうですよね。   
 .SpecialCells(xlCellTypeVisibleで一つの範囲と勝手に
 思い込んでいました。指摘していただいて本当に感謝です。
 Loopで足しこんでいく方法に切り替えます。

 (みやほりん)さま
 このシートはある任意のKeyでユーザがフィルタをかけ
 表示した範囲の中からさらに 必要なレコードに対しユーザが
 [K]をセットしていくという使い方をしています。
 そのとき[K]が入力されたレコードのL列の値を累積しながら エクセル上に
 表示していくという仕組みなものですから最初から[K]を フィルターで
 抽出するという方式では だめなんです。言葉足らずですみません。
 いずれにしてもお二方の ご丁寧なご指導に感謝いたします。
 ありがとうございました。 (Taro) 
   


コメント返信:

[ 一覧(最新更新順) ]


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