Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2018, 14:35   #1
zybik
 
Регистрация: 01.06.2018
Сообщений: 3
По умолчанию Поиск и суммирование данных в таблице по последним

Здравствуйте, подскажите как реализовать такую вот вещь.

Имеется файл с матчами, в примере, две команды в лиге "ENG L1". У команд были до этого игры(не между собой, а с другими командами той же лиги), может 2, а может и все 20. Меня интересует ПЯТЬ(как пример) последних игр КАЖДОЙ команды.

На примере матча "Sheffield United - Coventry City" в лиге ENG L1.

Нужно узнать сколько всего голов забыла домашняя команда. Домашняя команда - Sheffield United. Но не просто сумму посчитать, а посчитать забитые мячи последних 5 игр. В идеале получается, формула или макрос начинают поиск снизу вверх (длинная красная стрелка), и находит матчи в порядке их нумерации. Как только нашла последний матч, начинает (или в процессе) считать кол-во голов забытих этой командой (выделены красным), по итогу насчитывает в данном случае 7.
Понятно, что нужна возможность просто ее протянуть для всего столбца, чтоб под каждый конкретный матч оно считала значения. Если же игр меньше 5 (или числа N - заданное нами кол-во последних матчей для поиска), то выводить "данных недостаточно".

Вложения
Тип файла: xlsx work1(1).xlsx (47.5 Кб, 10 просмотров)
zybik вне форума Ответить с цитированием
Старый 01.06.2018, 15:37   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
Function findLast5(Team As Range, League As Range)
    Dim sTeam As String
    Dim sLeague As String
    Dim MatchesFound As Byte
    Dim Score As Byte
    Dim LastRow As Integer
    MatchesFound = 0
    
    Score = 0
    sLeague = League.Value2
    sTeam = Team.Value2
    
    LastRow = Cells(Rows.Count, "A").End(xlUp).Row
    
    While MatchesFound < 5 And LastRow > 0
        If Cells(LastRow, "A") = League Then
            If LCase(Cells(LastRow, "B")) = LCase(Team) Then
                Score = Score + CInt(Cells(LastRow, "H"))
                MatchesFound = MatchesFound + 1
             ElseIf LCase(Cells(LastRow, "D")) = LCase(Team) Then
                Score = Score + CInt(Cells(LastRow, "I"))
                MatchesFound = MatchesFound + 1
            End If
        End If
        LastRow = LastRow - 1
    Wend
    If MatchesFound < 5 Or LastRow = 0 Then
        findLast5 = "Недостаточно данных"
    Else
        findLast5 = Score
    End If
End Function
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 01.06.2018, 17:01   #3
zybik
 
Регистрация: 01.06.2018
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Код:
Function findLast5(Team As Range, League As Range)
    Dim sTeam As String
    Dim sLeague As String
    Dim MatchesFound As Byte
    Dim Score As Byte
    Dim LastRow As Integer
    MatchesFound = 0
    
    Score = 0
    sLeague = League.Value2
    sTeam = Team.Value2
    
    LastRow = Cells(Rows.Count, "A").End(xlUp).Row
    
    While MatchesFound < 5 And LastRow > 0
        If Cells(LastRow, "A") = League Then
            If LCase(Cells(LastRow, "B")) = LCase(Team) Then
                Score = Score + CInt(Cells(LastRow, "H"))
                MatchesFound = MatchesFound + 1
             ElseIf LCase(Cells(LastRow, "D")) = LCase(Team) Then
                Score = Score + CInt(Cells(LastRow, "I"))
                MatchesFound = MatchesFound + 1
            End If
        End If
        LastRow = LastRow - 1
    Wend
    If MatchesFound < 5 Or LastRow = 0 Then
        findLast5 = "Недостаточно данных"
    Else
        findLast5 = Score
    End If
End Function

Проверил, выдает почему-то не 7, а 6 как результат.
Если растянуть на весь столбец, то везде где "Sheffield United" показывает 6. Хотя такого не должно быть, ведь чем выше по столбцу, тем меньше игр сыгранно данной командой. То есть поиск последних 5 игр должен начинаться со строки формулы.

Последний раз редактировалось zybik; 02.06.2018 в 11:17.
zybik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск данных в таблице Tsvetulya Microsoft Office Excel 6 20.06.2018 06:43
Поиск частично совпадающих данных в таблице Excel O'Lenina Microsoft Office Excel 3 04.07.2016 19:24
Поиск данных в таблице Аксесс Rust_12 Microsoft Office Excel 11 18.05.2013 08:02
Поиск данных по таблице в базе данных Awesome96 БД в Delphi 1 03.12.2012 09:53
Поиск и суммирование данных в таблице произвольного размера Darkdog Microsoft Office Excel 26 16.02.2010 10:47