Страница 2 из 2
Re: Не большая экскурсия по макросам в Excel
Добавлено: 16 мар 2009, 14:16
kuznetsovSergey
а как предположим сравнивать время? предположим время 9:00 в ячейке A1 больше 8:59 в ячейке A2 , то её считать. И так пройти весь столбец, и посчитать количество ячеек, удовлетворяющих требованию?
Re: Не большая экскурсия по макросам в Excel
Добавлено: 16 мар 2009, 14:33
AlexZZZ
Код: Выделить всё
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
Re: Не большая экскурсия по макросам в Excel
Добавлено: 16 мар 2009, 14:55
kuznetsovSergey
Код: Выделить всё
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
[/quote]
она как то не очень коректно считает. Если у меня 127 строк, он пишет что 128 строк, больше по времени. Это не правильно =(
Re: Не большая экскурсия по макросам в Excel
Добавлено: 16 мар 2009, 15:14
AlexZZZ
У меня считает корректно. Просто подсчёт начинается с первой строки и пустые ячейки он считает за нулевые значения.
Если в первой строке у Вас заголовок, начните посчёт со второй строки. Для игнорирования нулевых значений и избежания ошибок, связанных с текстовыми значениями введённых чисел, попробуйте так:
Код: Выделить всё
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
И проверьте, в данном примере нужное число для поиска должно находиться на листе "Лист2" в ячейке "С1". А запись будет производиться на тот же лист в ячейку "E1".
Re: Не большая экскурсия по макросам в Excel
Добавлено: 18 мар 2009, 12:47
Aent
Можно несколько проще
Код: Выделить всё
Application.WorksheetFunction.SumIf([DTime],">11:00",[Dsum])
Здесь: DTime - диапазон для полей с временем
DSum - диапазон суммирования
в котором сумируются записи для строк с временем > 11:00
Если нужно несколько критериев - используйте SumProduct
Re: Не большая экскурсия по макросам в Excel
Добавлено: 18 мар 2009, 15:30
AlexZZZ
Да, лишнее свидетельство, что про функции рабочего листа забывать не стоит.
Только нужно вводить, как я понял, дополнительный столбец с единичками для подсчёта нужных записей.
Аналогично, для подсчёта фамилий заканчивающиеся на "ова" таким же способом, нужно 2 дополнительных стобца: один с единичками, второй с формулой такого вида: =ПРАВСИМВ([FIO];3), где [FIO]-ячейка с фамилией в той же строке.
Код: Выделить всё
Application.WorksheetFunction.SumIf([Dова],"ова",[Dsum])
где [Dова] - диапазон с вышеприведённой формулой, а [Dsum] - диапазон, содержащий единички для подсчёта суммы удовлетворяющих критерию записей.
Или вариант с одним доп. столбцом и формулой в нём:
=ЕСЛИ(ЕОШИБКА(НАЙТИ("ова";[FIO];1));0;1)
Тогда макрос:
где [Dsum] - - диапазон с вышеприведённой формулой.
Преимущество - в скорости вычисления, недостаток - в введении дополнительных столбцов.
Re: Не большая экскурсия по макросам в Excel
Добавлено: 18 мар 2009, 23:29
Aent
AlexZZZ, я что то не понял. Какие дополнительные столбцы ?
Зачем? Всё гораздо проще:
или в VBA
Код: Выделить всё
Application.WorksheetFunction.CountIf([Dova],"*ова")
Так что действительно
AlexZZZ писал(а):про функции рабочего листа забывать не стоит
.

Re: Не большая экскурсия по макросам в Excel
Добавлено: 19 мар 2009, 00:03
AlexZZZ
Aent писал(а):AlexZZZ, я что то не понял. Какие дополнительные столбцы ?
Зачем? Всё гораздо проще:
Да, действительно, так проще! Спасибо, не сообразил.
