Доброй ночи! В приложенном файле по каждому последнему уникальному (они условно отфильтрованы последовательно) значению в первой колонке хочу получить value по сумме из второй колонки в Msgbox
Помогите, пожалуйста, продвинуться Застыл на этом... [vba]
Код
Sub count() For x = 2 To lr lr = Cells(Rows.Count, 1).End(xlUp).Row If Cells(x, 1) = lr.Value Then ' тщетная попытка найти последнее значение... если бы counter = counter + Cells(x, 2) End If Next x MsgBox counter End Sub
[/vba]
Доброй ночи! В приложенном файле по каждому последнему уникальному (они условно отфильтрованы последовательно) значению в первой колонке хочу получить value по сумме из второй колонки в Msgbox
Помогите, пожалуйста, продвинуться Застыл на этом... [vba]
Код
Sub count() For x = 2 To lr lr = Cells(Rows.Count, 1).End(xlUp).Row If Cells(x, 1) = lr.Value Then ' тщетная попытка найти последнее значение... если бы counter = counter + Cells(x, 2) End If Next x MsgBox counter End Sub
в первой колонке хочу получить value по сумме из второй колонки в Msgbox
Тоже непонятно: при чем здесь Msgbox?
В файле 4 столбца данных, на втором листе имена... Расшитение .xlsx, где макросы не живут... Вы тот файл показали? Если да, зачем запутывать людей лишними данными?
в первой колонке хочу получить value по сумме из второй колонки в Msgbox
Тоже непонятно: при чем здесь Msgbox?
В файле 4 столбца данных, на втором листе имена... Расшитение .xlsx, где макросы не живут... Вы тот файл показали? Если да, зачем запутывать людей лишними данными?vikttur
Сообщение отредактировал vikttur - Воскресенье, 30.04.2017, 01:39
MsgBox по первому значению (в нашем случае 1) сумма = 6 MsgBox по второму значению (в нашем случае 2) сумма = 4
MsgBox мне нужно, чтобы дальше использовать value по каждому из значений в дальнейшем коде, для понимания, ...я с этими значениями еще буду дальше думать и мне так удобнее понимать код. Вокенбах советует...
Код я скинул, чтобы показать, где я остановился, возможно, чтобы показать, что я хочу получить, но получить не удалось... Прилагаю файл без лишних колонок и листа.
12 12 12 23 21
MsgBox по первому значению (в нашем случае 1) сумма = 6 MsgBox по второму значению (в нашем случае 2) сумма = 4
MsgBox мне нужно, чтобы дальше использовать value по каждому из значений в дальнейшем коде, для понимания, ...я с этими значениями еще буду дальше думать и мне так удобнее понимать код. Вокенбах советует...
Код я скинул, чтобы показать, где я остановился, возможно, чтобы показать, что я хочу получить, но получить не удалось... Прилагаю файл без лишних колонок и листа.ant6729
Насколько я понял, там нужно просто просуммировать второй столбец по группам, заданным в первом. Если бы это была формула, то что-то вроде протягиваемой
Код
=СУММЕСЛИ($A$2:$A$37;$A2;$B$2:$B$37)
(ну или массивной "суммировать по уникальным", если отбирать в отдельную ячейку и массивом; а можно вообще взять и в сводной посчитать )
Но поскольку тут кодом, да ещё и "ключи условно последовательно", да ещё и неизвестны пределы для ключей, да ещё и "эти суммы потребуются дальше в коде", то на скорую руку приходит такое решение (код придется помещать в общий модуль):
[vba]
Код
Type Rec Key As Variant Value As Variant End Type
Dim aSums() As Rec
Sub PartSum()
ReDim aSums(0)
lr = Cells(Rows.Count, 1).End(xlUp).Row
For r = 2 To lr curKey = Cells(r, 1).Value curValue = Cells(r, 2).Value
For i = 1 To UBound(aSums) If aSums(i).Key = curKey Then Exit For Next If i > UBound(aSums) Then ReDim Preserve aSums(i) aSums(i).Key = curKey End If aSums(i).Value = aSums(i).Value + curValue Next
cView = "" For i = 1 To UBound(aSums) cView = cView & aSums(i).Key & " -> " & aSums(i).Value & vbCrLf Next MsgBox cView
End Sub
[/vba]
aSums останется заполненным для последующего использования. MsgBox можно было бы выдавать и для каждого ключа отдельно, но ведь всё равно надо сначала просчитать весь диапазон (помним - условно отсортированы), так что можно его и разом выдать в конце. Можно было, конечно, и коллекцию или словарь предложить в качестве хранилища результатов, но ТС, похоже, и так в процессе обучения пока находится.
P.S. Тема должна быть в "Вопросах по VBA", не?
Насколько я понял, там нужно просто просуммировать второй столбец по группам, заданным в первом. Если бы это была формула, то что-то вроде протягиваемой
Код
=СУММЕСЛИ($A$2:$A$37;$A2;$B$2:$B$37)
(ну или массивной "суммировать по уникальным", если отбирать в отдельную ячейку и массивом; а можно вообще взять и в сводной посчитать )
Но поскольку тут кодом, да ещё и "ключи условно последовательно", да ещё и неизвестны пределы для ключей, да ещё и "эти суммы потребуются дальше в коде", то на скорую руку приходит такое решение (код придется помещать в общий модуль):
[vba]
Код
Type Rec Key As Variant Value As Variant End Type
Dim aSums() As Rec
Sub PartSum()
ReDim aSums(0)
lr = Cells(Rows.Count, 1).End(xlUp).Row
For r = 2 To lr curKey = Cells(r, 1).Value curValue = Cells(r, 2).Value
For i = 1 To UBound(aSums) If aSums(i).Key = curKey Then Exit For Next If i > UBound(aSums) Then ReDim Preserve aSums(i) aSums(i).Key = curKey End If aSums(i).Value = aSums(i).Value + curValue Next
cView = "" For i = 1 To UBound(aSums) cView = cView & aSums(i).Key & " -> " & aSums(i).Value & vbCrLf Next MsgBox cView
End Sub
[/vba]
aSums останется заполненным для последующего использования. MsgBox можно было бы выдавать и для каждого ключа отдельно, но ведь всё равно надо сначала просчитать весь диапазон (помним - условно отсортированы), так что можно его и разом выдать в конце. Можно было, конечно, и коллекцию или словарь предложить в качестве хранилища результатов, но ТС, похоже, и так в процессе обучения пока находится.
P.S. Тема должна быть в "Вопросах по VBA", не?AndreTM