Страница 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)
Тогда макрос:

Код: Выделить всё

Application.WorksheetFunction.Sum([Dsum])
где [Dsum] - - диапазон с вышеприведённой формулой.

Преимущество - в скорости вычисления, недостаток - в введении дополнительных столбцов.

Re: Не большая экскурсия по макросам в Excel

Добавлено: 18 мар 2009, 23:29
Aent
AlexZZZ, я что то не понял. Какие дополнительные столбцы ?
Зачем? Всё гораздо проще:

Код: Выделить всё

=СЧЁТЕСЛИ(FIO;"*ова")
или в VBA

Код: Выделить всё

Application.WorksheetFunction.CountIf([Dova],"*ова")
Так что действительно
AlexZZZ писал(а):про функции рабочего листа забывать не стоит
.
:)

Re: Не большая экскурсия по макросам в Excel

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

Код: Выделить всё

=СЧЁТЕСЛИ(FIO;"*ова")
Да, действительно, так проще! Спасибо, не сообразил. :)