7

Excel では、グローバル範囲可視 (またはフィルター処理された) 範囲の両方のCOUNTIF & SUMをフィルター処理して表示する必要があります。

次のコードを使用して、グローバル範囲のCOUNTIFSUMを既に表示できます。

AtmCount = Application.WorksheetFunction.CountIf(Range("X3:X4533"), ">0")
AtmSum = Application.WorksheetFunction.Sum(Range("X3:X4533"))

次のように、表示 (またはフィルター処理) された範囲のCOUNTを取得することもできます。

AtmCurrentCount = Range("X3:X4533").SpecialCells(xlCellTypeVisible).Count

ただし、これでも可視 (またはフィルター処理) 範囲のSUMは未解決のままです。

AtmCurrentSum = ???

私は本当に立ち往生しました。誰か助けてくれませんか?

4

6 に答える 6

7

これはあなたが望むことをします。visibleTotal を合計の適切なデータ型に設定し、ws オブジェクトと rng オブジェクトをワークブックの内容と一致するように変更します。

Sub SumVisible()
    Dim ws As Worksheet
    Dim rng As Range
    Dim visibleTotal As Long

    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set rng = ws.Range("B1:B7")

    ws.AutoFilterMode = False
    rng.AutoFilter field:=1, Criteria1:=5

    visibleTotal = Application.WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeVisible))
    ' print to the immediate window
    Debug.Print visibleTotal
End Sub

フィルタリングされた範囲の一部のみを合計したい場合 (たとえば、列 A でフィルタリングし、列 B の合計が必要な場合) は、次の質問と回答を参照してください:フィルタリングされたテーブルの 1 つの列から可視セルをコピー/貼り付け/計算します。

于 2013-07-24T13:29:52.763 に答える
1

sumif ではなく sum のみが必要な場合

AtmCurrentSum = application.worksheetfunction.subtotal(9, Range("X3:X4533"))
于 2013-07-24T13:56:00.647 に答える