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

Вход

Регистрация

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

 

= Мир MS Excel/Сумма по каждому элементу словаря - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сумма по каждому элементу словаря (Макросы/Sub)
Сумма по каждому элементу словаря
ant6729 Дата: Суббота, 14.04.2018, 00:22 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 498
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Всем привет
Подскажите, пожалуйста, как просуммировать по каждому ключу в колонке G
К сообщению приложен файл: 9709048.xlsm(16.4 Kb)
 
Ответить
СообщениеВсем привет
Подскажите, пожалуйста, как просуммировать по каждому ключу в колонке G

Автор - ant6729
Дата добавления - 14.04.2018 в 00:22
Hugo Дата: Суббота, 14.04.2018, 00:32 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2854
Репутация: 639 ±
Замечаний: 0% ±

как просуммировать по каждому ключу

[vba]
Код
.Item(c) = .Item(c) + 1
...
Range("G2").Resize(.Count) = Application.Transpose(.Items)
[/vba]
Только по спецификации не гарантируется соответствие ключей и итемов по позициям. Хотя всегда совпадало... но в важных больших работах я бы не рисковал.
P.S. Кстати тут удобнее выгружать сразу так:
[vba]
Код
Range("F2").Resize(.Count, 2) = Application.Transpose(Array(.Keys, .Items))
[/vba]


excel@nxt.ru
webmoney: E265281470651 R418926282008 Z422237915069


Сообщение отредактировал Hugo - Суббота, 14.04.2018, 00:37
 
Ответить
Сообщение
как просуммировать по каждому ключу

[vba]
Код
.Item(c) = .Item(c) + 1
...
Range("G2").Resize(.Count) = Application.Transpose(.Items)
[/vba]
Только по спецификации не гарантируется соответствие ключей и итемов по позициям. Хотя всегда совпадало... но в важных больших работах я бы не рисковал.
P.S. Кстати тут удобнее выгружать сразу так:
[vba]
Код
Range("F2").Resize(.Count, 2) = Application.Transpose(Array(.Keys, .Items))
[/vba]

Автор - Hugo
Дата добавления - 14.04.2018 в 00:32
ant6729 Дата: Суббота, 14.04.2018, 01:02 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 498
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Спасибо, Hugo!
Все взлетело...Посчитались количества Numbers
Ну, ок... а чтобы в колонке g суммировались сами Elements как в суммеесли для каждого Numbers...Это как?
 
Ответить
СообщениеСпасибо, Hugo!
Все взлетело...Посчитались количества Numbers
Ну, ок... а чтобы в колонке g суммировались сами Elements как в суммеесли для каждого Numbers...Это как?

Автор - ant6729
Дата добавления - 14.04.2018 в 01:02
Hugo Дата: Суббота, 14.04.2018, 01:10 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2854
Репутация: 639 ±
Замечаний: 0% ±

[vba]
Код
.Item(c) = .Item(c) + соотв.элемент
[/vba] но в данном цикле никак не возьмёте, а переписывать код Вам :)


excel@nxt.ru
webmoney: E265281470651 R418926282008 Z422237915069
 
Ответить
Сообщение[vba]
Код
.Item(c) = .Item(c) + соотв.элемент
[/vba] но в данном цикле никак не возьмёте, а переписывать код Вам :)

Автор - Hugo
Дата добавления - 14.04.2018 в 01:10
ant6729 Дата: Суббота, 14.04.2018, 12:53 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 498
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Прозрел, но как-то неоптимально

на листе отсортировался по намберам на всякий

Numbers Elements
1 1
2 2
2 7
4 3
4 10
5 4
10 11
12 6
12 5
12 8
12 9

И два раза использовал [vba]
Код
With CreateObject("Scripting.Dictionary")
[/vba] потому что по другому не знаю как
Не могу понять, как один раз это сделать

[vba]
Код


Sub jjjj()

Dim ar, ai, ak, arCount()
Dim count1&, count2&
Dim i&
Dim c

lr = Cells(Rows.Count, 1).End(xlUp).Row
ar = Range("A1:B" & lr)

With CreateObject("Scripting.Dictionary")

For i = 2 To UBound(ar)

.Item(ar(i, 1)) = .Item(ar(i, 1)) + ar(i, 2)

Next

ak = .Keys

ai = .Items

Range("C1").Resize(, 3) = Array("Uniques", "UniquesCOUNT", "SumUniques")
Columns.AutoFit

Range("E2").Resize(.Count) = Application.Transpose(ai) 'ïðîñòàíîâêà ñóììû ïî ïîçèöèÿì

For Each c In Range("A2", Range("A" & Rows.Count).End(3)).Value

.Item(c) = .Item(c) + 1

Next

With CreateObject("Scripting.dictionary")
For Each c In Range("A2", Range("A" & Rows.Count).End(3)).Value
.Item(c) = .Item(c) + 1
Next
Range("D2").Resize(.Count, 1) = Application.Transpose(Array(.Items))
End With

[c1].Sort Key1:=[c1], Order1:=xlAscending, Header:=xlYes

End With

End Sub

[/vba]

Как можно оптимизироваться?


Сообщение отредактировал ant6729 - Суббота, 14.04.2018, 12:54
 
Ответить
СообщениеПрозрел, но как-то неоптимально

на листе отсортировался по намберам на всякий

Numbers Elements
1 1
2 2
2 7
4 3
4 10
5 4
10 11
12 6
12 5
12 8
12 9

И два раза использовал [vba]
Код
With CreateObject("Scripting.Dictionary")
[/vba] потому что по другому не знаю как
Не могу понять, как один раз это сделать

[vba]
Код


Sub jjjj()

Dim ar, ai, ak, arCount()
Dim count1&, count2&
Dim i&
Dim c

lr = Cells(Rows.Count, 1).End(xlUp).Row
ar = Range("A1:B" & lr)

With CreateObject("Scripting.Dictionary")

For i = 2 To UBound(ar)

.Item(ar(i, 1)) = .Item(ar(i, 1)) + ar(i, 2)

Next

ak = .Keys

ai = .Items

Range("C1").Resize(, 3) = Array("Uniques", "UniquesCOUNT", "SumUniques")
Columns.AutoFit

Range("E2").Resize(.Count) = Application.Transpose(ai) 'ïðîñòàíîâêà ñóììû ïî ïîçèöèÿì

For Each c In Range("A2", Range("A" & Rows.Count).End(3)).Value

.Item(c) = .Item(c) + 1

Next

With CreateObject("Scripting.dictionary")
For Each c In Range("A2", Range("A" & Rows.Count).End(3)).Value
.Item(c) = .Item(c) + 1
Next
Range("D2").Resize(.Count, 1) = Application.Transpose(Array(.Items))
End With

[c1].Sort Key1:=[c1], Order1:=xlAscending, Header:=xlYes

End With

End Sub

[/vba]

Как можно оптимизироваться?

Автор - ant6729
Дата добавления - 14.04.2018 в 12:53
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сумма по каждому элементу словаря (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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