Как подсчитать количество не-нулей в excel?

Я пытаюсь сделать макрос, который будет проходить через всю книгу и подсчитать количество дней работы сотрудника. Листы имеют работу, разломанную в днях, поэтому все Т должны найти дни, которые не равны нулю. Я попытался использовать COUNTIF(A11:A12,">0") и я получаю сообщение « Expected : list separator or ) . Я использую цикл For Each для работы через листы. Я хотел бы поместить всю информацию на новый лист в конце рабочей книги с указанием имени сотрудника и дней работы. Я очень новичок в визуальных базовых, но неплохо с c #.

Я сейчас так далеко

 Option Explicit Sub WorksheetLoop2() ' Declare Current as a worksheet object variable. Dim Current As Worksheet Dim LastColumn As Integer If WorksheetFunction.CountA(Cells) > 0 Then ' Search for any entry, by searching backwards by Columns. LastColumn = Cells.Find(What:="*", After:=[A1], _ SearchOrder:=xlByColumns, _ SearchDirection:=xlPrevious).Column End If ' Loop through all of the worksheets in the active workbook. For Each Current In Worksheets Current.Range("A27") = Application.WorksheetFunction.CountIf(Current.Range(Cells(11, LastColumn), Cells(16, LastColumn)), ">0") Current.Range("A28") = Application.WorksheetFunction.CountIf(Current.Range("Al17:Al22"), ">0") Next End Sub 

Когда я запускаю это, я получаю сообщение об ошибке, method range of object'_worksheet' failed ошибку в method range of object'_worksheet' failed . Я также не смог найти способ получить всю информацию на сводном листе.

VBA Solution, в свете вашего последнего комментария выше.

Хорошая практика программирования VBA влечет за собой всегда использование Option Explicit с вашим кодом, так вы знаете, когда у вас нет переменных, объявленных правильно, или, иногда, если код плохой! В этом случае вы бы поняли, что просто писать A27 не означает, что вы возвращаете значение в ячейку A27, а просто устанавливаете значение, которое вы получаете в переменной A27. Или, может быть, вы не знаете этого точно, но вы узнаете, где ваша проблема очень быстро!

Этот код должен исправить это для вас:

 Option Explicit Sub WorksheetLoop2() 'Declare Current as a worksheet object variable. Dim Current As Worksheet ' Loop through all of the worksheets in the active workbook. For Each Current In Worksheets Current.Range("A27") = Application.WorksheetFunction.CountIf(Current.Range("A11:A12"), ">0") Next End Sub 

В случае, если это поможет, решение, отличное от VBA:

Предполагая, что у вас есть сводный лист и каждый сотрудник на отдельном листе, с днями в столбце A и часами работы в столбце B, введите формулу в строке формул в B1 резюме и запустите список имен в столбце A.

Лист

Interesting Posts

Excel в PDF с использованием VBA (удаление пустых страниц)

CSV удаляет все после 4-й запятой

Исключение POI Apache Часть с именем '/docProps/core.xml' уже существует

Есть ли способ объединить несколько записей фрейма данных в одну запись?

.End (xlDown) неправильно выбрать последнюю непустую ячейку

Ошибка несоответствия типа VBA – несогласованность

Переупорядочить / перетасовать значения в строке / столбце в Excel

Как вы вычисляете несколько страниц в целом в LiveCycle?

Поиск каталога, создающего его, когда он не существует

Как открыть несколько вкладок в Google Chrome с помощью макроса

Запрос ADO листа с длинными именами в ошибке Jet

1 microsoft second = 0,00001157407407

Microsoft Excel не может получить доступ к файлу «…». Существует несколько возможных причин, по которым Windows Server 2008 R2 с Microsoft Office 2010

Оптимизация кода – прокрутка / поиск электронной почты из Excel

VBA копирует строку и вставляет научную нотацию

Давайте будем гением компьютера.