|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.12.2010, 15:09 | #1 |
Пользователь
Регистрация: 12.11.2010
Сообщений: 83
|
Перенос данных на другой лист
Суть программы, на листе имеются код клиента и его задолженность, при этом код клиента может повторяться, необходимо посчитать общую сумму долга и отразить код клиента и сумму долга в отдельных ячейках на другом листе. Вот который написал, он считает общую сумму по всем клиентам, но не могу разделить это по клиентам. Все необходимо сделать в цикле For next, ну если сделаете в Do, сильно не обижусь, для общего развития тоже пойдет.
Public Sub éöéöé11() With Range("A2") kod = Range(.Offset(1, 0), .End(xlDown)).Rows.Count End With qwe = 0 For i = 1 To kod kodn = Range("A2").Offset(i, 0) cena = Range("B2").Offset(i, 0) If Range("A2").Offset(i, 0) = kodn Then qwe = qwe + cena End If Next i End Sub Если можно в кратце объясните смысл для тупых!!! Последний раз редактировалось Palomnik1096; 16.12.2010 в 15:11. |
16.12.2010, 17:42 | #2 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Используйте словари или коллекции.
Вот пример со словарём, делает что-то подобное. Код:
В конце выгружает уникальные и суммы рядом в два столбца.
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 16.12.2010 в 17:45. |
17.12.2010, 01:53 | #3 |
Пользователь
Регистрация: 12.11.2010
Сообщений: 83
|
к сожалению в своем самостоятельном обучении, до массивов и словарей не дошел, поэтому ничего не понял, но за ответ спасибо огромное!!!
|
17.12.2010, 09:40 | #4 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Если нужно разделить по неизвестному количеству уникальных (заранее неизвестных), то без словаря или коллекции не обойдётесь.
Хотя можно подобие этого на массиве сообразить, но больно медленная конструкция получится - каждого нового прогонять через массив, потом Redim Preserve ему...
webmoney: E265281470651 Z422237915069 R418926282008
|
17.12.2010, 16:55 | #5 | |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Цитата:
Плюсы такого решения в том что можно строить любые проверки, сравнения и т.п. Ограничение только фантазия. При этом ни какие дополнительные структуры не создаются (что в теории должно экономить оперативную память . Минусы в том что вся "сводка" просматривается для каждой строки "клиент", что в теории может занять значительное время при большом количестве записей (хотя простейший механизм оптимизации я вставил). Но на практике все происходит весьма быстро, так как вся информация в памяти и нет обращений к диску. К тому же комп поступает почти так же при любой реализации, только ты этого не видишь.
С уважением, Алексей.
Последний раз редактировалось tae1980; 17.12.2010 в 17:00. |
|
20.12.2010, 15:12 | #6 |
Пользователь
Регистрация: 12.11.2010
Сообщений: 83
|
Нашел решение своей задачи, код не мой, нашел в инете, немного переделал под себя, НО 95% кода не мои, мне кажется все-таки он как-то понятней. Вот сам код
Public Sub Пример13() List2 = "Лист2" ' Лист со всеми покупками отсортированными по коду покупателя List3 = "Лист3" ' Лист куда помещаем суммарные покупки SumMin = 2000 ' Граничная сумма для учета AKod = "A2" ' Первая ячейка с кодом покупателя ASum = "B2" ' Первая ячейка с суммой KKod = "A" ' Столбец с кодами на листе с результатом KSum = "B" ' Столбец с суммами на листе с результатом RKod = "A2" ' Первая ячейка с кодом покупателя на листе с результатом RSum = "B2" ' Первая ячейка с итоговой суммой покупателя на листе с результатом Sheets(List3).Columns(KKod).ClearCo ntents ' Чистим столбцы от прежних результатов Sheets(List3).Columns(KSum).ClearCo ntents Sheets(List2).Select i = 0 j = 0 Do While Range(AKod).Offset(i, 0) <> "" TSum = 0 TKod = Range(AKod).Offset(i, 0) Do While TKod = Range(AKod).Offset(i, 0) TSum = TSum + Range(ASum).Offset(i, 0) i = i + 1 Loop If TSum >= SumMin Then Sheets(List3).Range(RKod).Offset(j, 0) = TKod Sheets(List3).Range(RSum).Offset(j, 0) = TSum j = j + 1 End If Loop Sheets(List3).Select End Sub |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
перенос данных на другой лист | Jonny B | Microsoft Office Excel | 15 | 26.04.2011 09:16 |
Перенос на другой лист по значению столбца | ElenaNTro | Microsoft Office Excel | 5 | 17.03.2011 14:50 |
поиск и перенос на другой лист. | artssp | Microsoft Office Excel | 34 | 01.12.2010 05:58 |
Выбор и перенос данных в другой лист | sergey77 | Microsoft Office Excel | 6 | 17.08.2010 17:10 |
Выбор и перенос данных в другой лист, книгу. | Avald | Microsoft Office Excel | 1 | 16.06.2008 10:44 |