Не большая экскурсия по макросам в Excel
Модератор: Naeel Maqsudov
-
- Сообщения: 163
- Зарегистрирован: 05 мар 2009, 11:27
а как предположим сравнивать время? предположим время 9:00 в ячейке A1 больше 8:59 в ячейке A2 , то её считать. И так пройти весь столбец, и посчитать количество ячеек, удовлетворяющих требованию?
Код: Выделить всё
Sub ПодсчётОВА()
Dim f As String
Dim n As Long
Dim r As Long
f = "ова"
n = 0
For r = 1 To 100 ' 1-начальная строка поиска, 100 - конечная
If Right(Sheets("Лист1").Cells(r, 3).Value, Len(f)) = f Then n = n + 1 ' 3 - это номер столбца для поиска
Next r
Sheets("Лист2").Cells(1, 2).Value = n
End Sub
Код: Выделить всё
Sub ПодсчётЧисел()
Dim p As Long
Dim n As Long
Dim r As Long
p = Sheets("Лист2").Cells(1, 3).Value ' В этой ячейке должна быть указана число (дата, время и т.д.) больше которого будет вестись подсчёт
n = 0
For r = 1 To 100 ' 1-начальная строка поиска, 100 - конечная
If Sheets("Лист1").Cells(r, 3).Value > p Then n = n + 1 ' 3 - это номер столбца для поиска
Next r
Sheets("Лист2").Cells(1, 5).Value = n ' помещаем в нужную ячейку результат поиска
End Sub
-
- Сообщения: 163
- Зарегистрирован: 05 мар 2009, 11:27
Код: Выделить всё
Sub ПодсчётЧисел()
Dim p As Long
Dim n As Long
Dim r As Long
p = Sheets("Лист2").Cells(1, 3).Value ' В этой ячейке должна быть указана число (дата, время и т.д.) больше которого будет вестись подсчёт
n = 0
For r = 1 To 100 ' 1-начальная строка поиска, 100 - конечная
If Sheets("Лист1").Cells(r, 3).Value > p Then n = n + 1 ' 3 - это номер столбца для поиска
Next r
Sheets("Лист2").Cells(1, 5).Value = n ' помещаем в нужную ячейку результат поиска
End Sub
она как то не очень коректно считает. Если у меня 127 строк, он пишет что 128 строк, больше по времени. Это не правильно =(
У меня считает корректно. Просто подсчёт начинается с первой строки и пустые ячейки он считает за нулевые значения.
Если в первой строке у Вас заголовок, начните посчёт со второй строки. Для игнорирования нулевых значений и избежания ошибок, связанных с текстовыми значениями введённых чисел, попробуйте так:
И проверьте, в данном примере нужное число для поиска должно находиться на листе "Лист2" в ячейке "С1". А запись будет производиться на тот же лист в ячейку "E1".
Если в первой строке у Вас заголовок, начните посчёт со второй строки. Для игнорирования нулевых значений и избежания ошибок, связанных с текстовыми значениями введённых чисел, попробуйте так:
Код: Выделить всё
Sub ПодсчётЧисел()
Dim p As Long
Dim n As Long
Dim r As Long
p = Val(Sheets("Лист2").Cells(1, 3).Value) ' В этой ячейке должна быть указана число (дата, время и т.д.) больше которого будет вестись подсчёт
n = 0
For r = 1 To 200 ' 1-начальная строка поиска, 100 - конечная
If Val(Sheets("Лист1").Cells(r, 3).Value) > p And Val(Sheets("Лист1").Cells(r, 3).Value) <>0 Then n = n + 1 ' 3 - это номер столбца для поиска
Next r
Sheets("Лист2").Cells(1, 5).Value = n ' помещаем в нужную ячейку результат поиска
End Sub
- Aent
- Сообщения: 1129
- Зарегистрирован: 01 окт 2006, 14:52
- Откуда: Saratov,Russia
- Контактная информация:
Можно несколько проще
Здесь: DTime - диапазон для полей с временем
DSum - диапазон суммирования
в котором сумируются записи для строк с временем > 11:00
Если нужно несколько критериев - используйте SumProduct

Код: Выделить всё
Application.WorksheetFunction.SumIf([DTime],">11:00",[Dsum])
DSum - диапазон суммирования
в котором сумируются записи для строк с временем > 11:00
Если нужно несколько критериев - используйте SumProduct
Андрей Энтелис,
aentelis.livejournal.com
aentelis.livejournal.com
Да, лишнее свидетельство, что про функции рабочего листа забывать не стоит.
Только нужно вводить, как я понял, дополнительный столбец с единичками для подсчёта нужных записей.
Аналогично, для подсчёта фамилий заканчивающиеся на "ова" таким же способом, нужно 2 дополнительных стобца: один с единичками, второй с формулой такого вида: =ПРАВСИМВ([FIO];3), где [FIO]-ячейка с фамилией в той же строке.
где [Dова] - диапазон с вышеприведённой формулой, а [Dsum] - диапазон, содержащий единички для подсчёта суммы удовлетворяющих критерию записей.
Или вариант с одним доп. столбцом и формулой в нём:
=ЕСЛИ(ЕОШИБКА(НАЙТИ("ова";[FIO];1));0;1)
Тогда макрос:
где [Dsum] - - диапазон с вышеприведённой формулой.
Преимущество - в скорости вычисления, недостаток - в введении дополнительных столбцов.
Только нужно вводить, как я понял, дополнительный столбец с единичками для подсчёта нужных записей.
Аналогично, для подсчёта фамилий заканчивающиеся на "ова" таким же способом, нужно 2 дополнительных стобца: один с единичками, второй с формулой такого вида: =ПРАВСИМВ([FIO];3), где [FIO]-ячейка с фамилией в той же строке.
Код: Выделить всё
Application.WorksheetFunction.SumIf([Dова],"ова",[Dsum])
Или вариант с одним доп. столбцом и формулой в нём:
=ЕСЛИ(ЕОШИБКА(НАЙТИ("ова";[FIO];1));0;1)
Тогда макрос:
Код: Выделить всё
Application.WorksheetFunction.Sum([Dsum])
Преимущество - в скорости вычисления, недостаток - в введении дополнительных столбцов.
- Aent
- Сообщения: 1129
- Зарегистрирован: 01 окт 2006, 14:52
- Откуда: Saratov,Russia
- Контактная информация:
AlexZZZ, я что то не понял. Какие дополнительные столбцы ?
Зачем? Всё гораздо проще:
или в VBA
Так что действительно

Зачем? Всё гораздо проще:
Код: Выделить всё
=СЧЁТЕСЛИ(FIO;"*ова")
Код: Выделить всё
Application.WorksheetFunction.CountIf([Dova],"*ова")
.AlexZZZ писал(а):про функции рабочего листа забывать не стоит

Андрей Энтелис,
aentelis.livejournal.com
aentelis.livejournal.com
Да, действительно, так проще! Спасибо, не сообразил.Aent писал(а):AlexZZZ, я что то не понял. Какие дополнительные столбцы ?
Зачем? Всё гораздо проще:Код: Выделить всё
=СЧЁТЕСЛИ(FIO;"*ова")
