2016-09-14 4 views
1

У меня возникли проблемы с получением моего макроса для использования функции countif для отображения частоты баллов в данной ячейке. Это часть более крупного макроса, над которым я сейчас работаю, для создания отчета из заданного набора экспортированных данных.Если функция не работает должным образом в vba

Когда я пытаюсь запустить код, он возвращает все нули в ячейках, которые я указал, даже если есть данные, которые соответствуют моим критериям.

Пожалуйста, не стесняйтесь, если вам нравится критиковать этот код, поскольку я только начинаю программировать и желаю учиться как можно больше.

Заранее благодарен!

Вот копия кода:

Dim i As Integer 
Dim ws_raw As Worksheet 
Dim ws_rpt As Worksheet 

Set ws_raw = Sheets("Raw Data") 
Set ws_rpt = Sheets("Report") 

If ws_raw.Range("H2") <> "" Then 

    i = WorksheetFunction.CountIf(Range("S2:CCC2"), "5") 
    ws_raw.Range("I2").Value = i 

    i = WorksheetFunction.CountIf(Range("S2:CCC2"), "6") 
    ws_raw.Range("J2").Value = i 

    i = WorksheetFunction.CountIf(Range("S2:CCC2"), "7") 
    ws_raw.Range("K2").Value = i 

    i = WorksheetFunction.CountIf(Range("S2:CCC2"), "8") 
    ws_raw.Range("L2").Value = i 

Else 

End If 

ответ

4

Try как,

i = WorksheetFunction.CountIf(Range("S2:CCC2"), 5) 

текста, который-выглядит, как-число не то же самое, как число; например 5<>"5".

Относительно примечания, явно ссылающейся на рабочий лист .Parent, широко считается «лучшей практикой». A With ... End With statement не только очищает ваш код, но и ускоряет его. Я также предпочитаю использовать Excel Application object по сравнению с WorksheetFunction object, поскольку любая ошибка может быть возвращена в вариант.

Dim i As Variant 
Dim ws_raw As Worksheet, ws_rpt As Worksheet 

Set ws_raw = Sheets("Raw Data") 
Set ws_rpt = Sheets("Report") 

With ws_rpt 
    If ws_raw.Range("H2") <> "" Then 
     i = Application.CountIf(.Range("S2:CCC2"), 5) 
     ws_raw.Range("I2").Value = i 

     i = Application.CountIf(.Range("S2:CCC2"), 6) 
     ws_raw.Range("J2").Value = i 

     i = Application.CountIf(.Range("S2:CCC2"), 7) 
     ws_raw.Range("K2").Value = i 

     i = Application.CountIf(.Range("S2:CCC2"), 8) 
     ws_raw.Range("L2").Value = i 
    Else 

    End If 
End With 
1

Вы имеете номера вы подсчетом преобразованы в текст, поместив их в двойной кавычки - попробуйте это:

i = WorksheetFunction.CountIf(Range("S2:CCC2"), 5) 
ws_raw.Range("I2").Value = i 


i = WorksheetFunction.CountIf(Range("S2:CCC2"), 6) 
ws_raw.Range("J2").Value = i 


i = WorksheetFunction.CountIf(Range("S2:CCC2"), 7) 
ws_raw.Range("K2").Value = i 


i = WorksheetFunction.CountIf(Range("S2:CCC2"), 8) 
ws_raw.Range("L2").Value = i 
Смежные вопросы