2017-02-20 1094 views
0

我有一個數據集,我正在使用過濾器。我只是想計算N列中可見的總值。數據從第2行開始,到第2047行結束。SpecialCells(xlCellTypeVisible)也包含隱藏/過濾的單元格

我看到了this thread,但它給了我同樣類型的問題。

這裏是我的功能:

Function sumVisible() As String 
Dim rng As Range 
Set rng = Range("N2:N2047").SpecialCells(xlCellTypeVisible) 
' Debug.Print "Range: " & rng.Address & ", Sum: " & WorksheetFunction.Sum(rng) 
sumVisible = Format(WorksheetFunction.Sum(rng), "$#,###.##") 
End Function 

從我目前的過濾器,我的標題行(1)是可見的,因爲是行901至937.所以,我想總結N901:N937。

但是,rng始終設置爲$N$2:$N$2047。我預計它是$N$901:$N$937

使用的是給我聯繫上述線程的功能,我得到了一系列的$N$2:$N$937 ...所以最起碼,我得到正確的年底行,但不是起始行。

但是!如果我在立即窗口中鍵入Range("N2:N2047").SpecialCells(xlCellTypeVisible).Select,在宏的外面,它正確地選擇可見單元格。還有一步,?Range("N2:N2047").SpecialCells(xlCellTypeVisible).address正確返回$N$901:$N$937

什麼可能會出錯?

編輯:我剛剛發現做=SUBTOTAL(9,N1:N2047)只會求和可見的單元格,所以我正在使用它。但我的問題仍然存在 - 爲什麼不是SpecialCells(xlCellTypeVisible)在宏中正常工作?

+0

功能正常工作對我來說。你如何隱藏你不想包含的行? (也許有一些有趣的事情正在進行,這意味着Excel不會認爲'.Hidden'是'True'。) – YowE3K

+0

@ YowE3K - 我只是簡單地使用過濾器。我有列中的數據,而且我正在根據列過濾出數據。我將行'2'過濾出來,並在立即窗口中執行'?行(2)。隱藏',正確返回'真'。我沒有任何'Worksheet_Change'類型的事件,唯一的宏是我問的那個。 – BruceWayne

+0

我嘗試手動隱藏行,並使用過濾器來隱藏行。這兩種方法似乎都按預期工作。 – YowE3K

回答

1

嘗試設置你的rng與下面的一行:

Set rng = Range("N2:N" & Cells(Rows.Count, "N").End(xlUp).Row).SpecialCells(xlCellTypeVisible) 

後來使用調試行Debug.Print rng.Address,我得到以下範圍內立即窗口:

$N$901:$N$937 
+0

嗯,好主意,但我仍然得到'$ N $ 2:$ N $ 937' 。莫名其妙地是數據...?我沒有做太多,只是在一列上過濾,沒有什麼「花哨」。我甚至完全限定了這個範圍,使它在'Sheet1'上運行。有更多的信息。我可以給?當然,我可以發佈一些樣本數據,但我有一種感覺,這與我的WB相比,更多的是數據本身。 – BruceWayne

+0

@BruceWayne它與你的數據或結構有某種聯繫,我用不同的過濾範圍進行了幾次測試,結果很好。 J欄中有什麼類型的格式? –

+0

列J被格式化爲「Number」。 N列是'General',但它們實際上是數字。讓我將它們格式化爲數字,然後重試。編輯:啊哈,我把N列改成'Number',看起來好像在工作。 ...這很奇怪。爲什麼它不能和'General'一起使用? – BruceWayne