2015-06-08 1 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/error

У меня также есть вопрос с выходом результата. почему он отображает целое число? Раньше я работал над этим с использованием критериев автофильтрации (с 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

Смежные вопросы