2015-06-08 62 views
1

此代碼的工作,直到環路遇到空白/錯誤單元值worksheetfunction.aggregate忽略隱藏/錯誤/ 0值

Dim ws1 As Worksheet, wstest As Worksheet, wskb As Worksheet 
Dim lastrowinc As Long, curRow As Long, lastrowkb As Long 
Dim medianvalue As Integer 
Dim critvalue As String 


'Sheet to look up Critvalue 
Set ws1 = Sheets("Incident") 

'Sheet where to store Medianvalue 
Set wstest = Sheets("Sheet3") 

'Sheet where to get Critvalue (A2 onwards) 
Set wskb = Sheets("KB Articles") 

'For autofilter criteria 
lastrowinc = ws1.Range("A" & Rows.Count).End(xlUp).Row 


lastrowkb = wskb.Range("A" & Rows.Count).End(xlUp).Row 

For curRow = 2 To lastrowkb 

critvalue = wskb.Range("A" & curRow).Value 

ws1.Range("M1:A" & lastrowinc).AutoFilter field:=13, Criteria1:=critvalue 



medianvalue = WorksheetFunction.Aggregate(12, 5, Columns(2)) 


wstest.Range("A" & Rows.Count).End(xlUp).Offset(1) = medianvalue 


Next curRow 

現在根據this page我們可以使用7至Arg2所得忽略隱藏和錯誤。我試過,但它仍然給這條線上的錯誤1004:medianvalue = WorksheetFunction.Aggregate(12, 5, Columns(2)) (注意我試過5和7,但仍然是相同的錯誤)。我甚至試圖設置所有空白單元格導致Excel錯誤(#N/A),但無濟於事。它的工作原理,直到它遇到一個BLANK /錯誤單元格

我也有一個結果輸出的問題。爲什麼它顯示一個整數?我之前使用手動自動篩選器標準工作(使用texbox),並顯示帶有小數點的值,但是當我將其整數化時。

謝謝你們。

+0

你可以添加你的數據樣本嗎?我試圖重新創建你的問題。 –

+1

你宣佈你的變量爲一個整數,這是一個整數...... – Rory

+0

正如@Rory所說,改變了'Dim medianvalue As Integer'到'Dim medianvalue As Double' – R3uK

回答

1

您可以使用Count函數測試是否存在至少一個數字值。

If WorksheetFunction.Count(ws1.Columns(2).SpecialCells(xlCellTypeVisible)) > 0 Then 
    medianvalue = WorksheetFunction.Aggregate(12, 5, ws1.Columns(2)) 
Else 
    medianvalue = some value that is meaningful to you 
End If 
+0

我想我知道我現在的問題是請幫助。因此標準值總是可以在ws1中找到,但是在自動過濾器之後,在ws1中將有一列存在空白單元格(列B)。 'WorksheetFunction.Aggregate(12,5,ws1.Columns(2))'當遇到具有空白列的單元集合時出錯。任何想法如何我可以解決它? – user2519726

+0

我發佈的代碼應該讓你處理。當列爲空時,您需要確定要報告的值。 – ChipsLetten

+0

謝謝你!有效。 – user2519726