Доброго времени суток, уважаемые форумчане. Подскажите, как можно решить небольшую проблему или избавьте от иллюзий (ниже объясню поподробней ). Итак, словарем отбираются данные и затем выгружаются на лист:
Все в принципе ОК, но иногда данных по расходу за один день у какого-либо подразделения несколько (в примере у подразделения БУЗООБСМЭ 22.06.2018 имеются 3 документа расхода). Сейчас все 3 документа отображаются в 3 строках, а как сделать так, чтобы в подобном случае номера расходных документов (сколько бы их не было) перечислялись бы через запятую в 1 ячейке, а сумма всех этих документов также отображалась в соответствующей ячейке? Пытался применить exists, типа если комбинация дата|подразделение уже встречалась, то к имеющимся данным добавить номер документа, но не вышло.
Теперь об избавлении от иллюзий , скажу честно, вариант решения (в свое время подсказанный мне на нашем глубокоуважаемом мною форуме) у меня уже есть, но он подразумевает использование 2-х последовательных циклов (сначала дата|подразделение + сумма, затем к данным номера документов). Но никак не могу избавиться от мысли что можно обойтись 1 циклом. Поэтому прошу не кидать слишком тяжелых тапок за то, что я имея решение, прошу показать другой вариант, а либо подсказать как это можно реализовать за 1 цикл, либо указать (желательно с разъяснением) почему вариант с 1 циклом невозможен.
Заранее спасибо всем откликнувшимся.
Код |
---|
y = Sheets("Расход").Range("A2:E" & Sheets("Расход").Cells(Rows.Count, [Date_dokumenta_rashoda].Column).End(xlUp).Row).Value Set dicRashod = CreateObject("Scripting.Dictionary"): dicRashod.CompareMode = 1 For i = 1 To UBound(y) key = y(i, 1) & "|" & y(i, 2) & "|" & y(i, 3) dicRashod.Item(key) = dicRashod.Item(key) + y(i, 4) Next i On Error Resume Next ReDim Arr_r(1 To dicRashod.Count, 1 To 4) For Each k In dicRashod.keys Data = Split(k, "|") j = j + 1 Arr_r(j, 1) = Data(2) Arr_r(j, 2) = Data(1) Arr_r(j, 3) = Data(0) Arr_r(j, 4) = CDbl(dicRashod.Item(k)) Next k Range("A20").Resize(UBound(Arr_r, 1), 4).Value = Arr_r |
Теперь об избавлении от иллюзий , скажу честно, вариант решения (в свое время подсказанный мне на нашем глубокоуважаемом мною форуме) у меня уже есть, но он подразумевает использование 2-х последовательных циклов (сначала дата|подразделение + сумма, затем к данным номера документов). Но никак не могу избавиться от мысли что можно обойтись 1 циклом. Поэтому прошу не кидать слишком тяжелых тапок за то, что я имея решение, прошу показать другой вариант, а либо подсказать как это можно реализовать за 1 цикл, либо указать (желательно с разъяснением) почему вариант с 1 циклом невозможен.
Заранее спасибо всем откликнувшимся.