Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Собрать сумму по критериям - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Собрать сумму по критериям
LOG Дата: Суббота, 02.11.2024, 16:29 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

02
Здравствуйте. Изучаю вба с нуля, мне необходимо посчитать сумму по годам (при этом дата выгружается в формате дата время) при условии, что статус зарегистрирован и так же сумму рядом при другом статусе, топорным способом где я указываю год у меня считает, но мне не обходимо переделать работу, я же не могу писть на все года формулы. Не могли бы вы мне помочь, файл прилагаю. Таблица должна выглять как на листе кторый добавляется автоматически (Год/Сумма/Акт Сумма)
К сообщению приложен файл: 100210208483_data.xlsm (24.8 Kb)


Сообщение отредактировал LOG - Суббота, 02.11.2024, 16:34
 
Ответить
СообщениеЗдравствуйте. Изучаю вба с нуля, мне необходимо посчитать сумму по годам (при этом дата выгружается в формате дата время) при условии, что статус зарегистрирован и так же сумму рядом при другом статусе, топорным способом где я указываю год у меня считает, но мне не обходимо переделать работу, я же не могу писть на все года формулы. Не могли бы вы мне помочь, файл прилагаю. Таблица должна выглять как на листе кторый добавляется автоматически (Год/Сумма/Акт Сумма)

Автор - LOG
Дата добавления - 02.11.2024 в 16:29
doober Дата: Суббота, 02.11.2024, 17:39 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 968
Репутация: 331 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте[vba]
Код
Sub Macro()
    Dim Wb As Workbook, Sh As Worksheet, A()
    Set Sh = ActiveSheet
    Set Wb = Sh.Parent
    LastRow = Sh.Cells(Sh.Rows.Count, "C").End(xlUp).Row
    Set List = CreateObject("scripting.dictionary")
    dx = Sh.Range("C1:G" & LastRow)
    For n = 2 To UBound(dx)
        Key = Year(CDate(dx(n, 5)))
        Total = Val(Replace(dx(n, 1), ",", "."))
        reg = 0
        If dx(n, 4) = "Зарегистрирован" Then
            reg = Total
        End If
        If List.Exists(Key) Then
            A = List.Item(Key)
            A(1) = A(1) + Total
            A(2) = A(2) + reg
            List.Item(Key) = A
        Else
            List.Item(Key) = Array(Key, Total, reg)
        End If
    Next

    Wb.Worksheets.Add After:=Wb.Worksheets(Wb.Worksheets.Count)
    Set Sh = Wb.Worksheets(Wb.Worksheets.Count)
    Sh.Range("B1").Value = "ВЕСЬ ДОХОД"
    Sh.Range("C1").Value = "АКТ ДОХОД"
    Sh.Range("A1").Value = "ГОД"
    Items = List.Items
    For n = 0 To List.Count - 1
        Item = Items(n)
        Sh.Cells(n + 2, 1).Resize(1, 3) = Item
    Next
End Sub
[/vba]


 
Ответить
СообщениеЗдравствуйте[vba]
Код
Sub Macro()
    Dim Wb As Workbook, Sh As Worksheet, A()
    Set Sh = ActiveSheet
    Set Wb = Sh.Parent
    LastRow = Sh.Cells(Sh.Rows.Count, "C").End(xlUp).Row
    Set List = CreateObject("scripting.dictionary")
    dx = Sh.Range("C1:G" & LastRow)
    For n = 2 To UBound(dx)
        Key = Year(CDate(dx(n, 5)))
        Total = Val(Replace(dx(n, 1), ",", "."))
        reg = 0
        If dx(n, 4) = "Зарегистрирован" Then
            reg = Total
        End If
        If List.Exists(Key) Then
            A = List.Item(Key)
            A(1) = A(1) + Total
            A(2) = A(2) + reg
            List.Item(Key) = A
        Else
            List.Item(Key) = Array(Key, Total, reg)
        End If
    Next

    Wb.Worksheets.Add After:=Wb.Worksheets(Wb.Worksheets.Count)
    Set Sh = Wb.Worksheets(Wb.Worksheets.Count)
    Sh.Range("B1").Value = "ВЕСЬ ДОХОД"
    Sh.Range("C1").Value = "АКТ ДОХОД"
    Sh.Range("A1").Value = "ГОД"
    Items = List.Items
    For n = 0 To List.Count - 1
        Item = Items(n)
        Sh.Cells(n + 2, 1).Resize(1, 3) = Item
    Next
End Sub
[/vba]

Автор - doober
Дата добавления - 02.11.2024 в 17:39
LOG Дата: Суббота, 02.11.2024, 18:35 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

02
doober, какой сложный код, спасибо больщое. Буду изучать код т.к. хочу потом собрать и по клиенту сумму, думала код будет легче...
 
Ответить
Сообщениеdoober, какой сложный код, спасибо больщое. Буду изучать код т.к. хочу потом собрать и по клиенту сумму, думала код будет легче...

Автор - LOG
Дата добавления - 02.11.2024 в 18:35
LOG Дата: Суббота, 02.11.2024, 19:09 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

02
doober, более менее поняла. А можете подсказать вот это
[vba]
Код
If List.Exists(Key) Then
            A = List.Item(Key)
            A(1) = A(1) + Total
            A(2) = A(2) + reg
            List.Item(Key) = A
        Else
            List.Item(Key) = Array(Key, Total, reg)
        End If
[/vba]
и почему тут -1 [vba]
Код
For n = 0 To List.Count - 1
[/vba]
 
Ответить
Сообщениеdoober, более менее поняла. А можете подсказать вот это
[vba]
Код
If List.Exists(Key) Then
            A = List.Item(Key)
            A(1) = A(1) + Total
            A(2) = A(2) + reg
            List.Item(Key) = A
        Else
            List.Item(Key) = Array(Key, Total, reg)
        End If
[/vba]
и почему тут -1 [vba]
Код
For n = 0 To List.Count - 1
[/vba]

Автор - LOG
Дата добавления - 02.11.2024 в 19:09
doober Дата: Суббота, 02.11.2024, 21:55 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 968
Репутация: 331 ±
Замечаний: 0% ±

Excel 2010
почему тут -1

Потому, что массив Items = List.Items начинается с нуля, а не 1.
  If List.Exists(Key) Then
Своими словами, это проверка наличия ключа в словаре.Если словарь содержит ключ, то делаем следующее.
Извлекаем массив по ключу, суммируем значения и обратно в словарь.
Иначе по новому ключу добавляем новый массив Array(Key, Total, reg)


 
Ответить
Сообщение
почему тут -1

Потому, что массив Items = List.Items начинается с нуля, а не 1.
  If List.Exists(Key) Then
Своими словами, это проверка наличия ключа в словаре.Если словарь содержит ключ, то делаем следующее.
Извлекаем массив по ключу, суммируем значения и обратно в словарь.
Иначе по новому ключу добавляем новый массив Array(Key, Total, reg)

Автор - doober
Дата добавления - 02.11.2024 в 21:55
Hugo Дата: Воскресенье, 03.11.2024, 00:12 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Изучаю вба с нуля
- и вот как раз сейчас в этой задаче изучаете то, что покроет 90% практических потребностей. Разберите все детали, можете сохранить код как образец.
Тут цикл, двумерный массив с листа, и одномерный массив, и словарь, и массив в словаре, осталось ещё коллекцию в словаре посмотреть, и выгрузку двумерного массива на лист (выгрузка одномерного тут тоже уже есть).
В итем словаря когда он не массив можно собирать сумму прямо в словаре. Как и пополнять коллекцию.
Ну может ещё
Select Case True
из нужного посмотреть.
И всё ))


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
Сообщение
Изучаю вба с нуля
- и вот как раз сейчас в этой задаче изучаете то, что покроет 90% практических потребностей. Разберите все детали, можете сохранить код как образец.
Тут цикл, двумерный массив с листа, и одномерный массив, и словарь, и массив в словаре, осталось ещё коллекцию в словаре посмотреть, и выгрузку двумерного массива на лист (выгрузка одномерного тут тоже уже есть).
В итем словаря когда он не массив можно собирать сумму прямо в словаре. Как и пополнять коллекцию.
Ну может ещё
Select Case True
из нужного посмотреть.
И всё ))

Автор - Hugo
Дата добавления - 03.11.2024 в 00:12
LOG Дата: Вторник, 05.11.2024, 19:23 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

02
doober, Спасибо
 
Ответить
Сообщениеdoober, Спасибо

Автор - LOG
Дата добавления - 05.11.2024 в 19:23
LOG Дата: Вторник, 05.11.2024, 19:24 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

02
Hugo, ого, хорошо возьму за основу, буду по сторчно изучать!
 
Ответить
СообщениеHugo, ого, хорошо возьму за основу, буду по сторчно изучать!

Автор - LOG
Дата добавления - 05.11.2024 в 19:24
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!