Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2015, 14:51   #1
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию Перенос данных по столбцам, объединив строки

Доброго времени суток, уважаемые форумчане!
Возникла проблема, с которой хочу к вам обратиться.
Есть таблица, в которую загружаются данные по клиентам (лист "Данные"), нужно расчитать период задолженности (сколько месяцев просрочки, гр.14"N") и
период задолженности в днях (гр.16 "P"), после чего, перенести полученные данные, на лист "Результат".

Что сделано:
На листе "Данные" в гр. 10-15 (J - Q), стоят формулы, которые расчитываются каждую строку отдельно, по каждой сумме. Теперь необходимо, с листа
"Данные", перенести суммы, сгруппировав по клиентам, это я сделал путем сводной таблицы (Лист1 гр.1-3"A-C"), полученные данные (счет, Тип, ИНН),
перенес на лист "Результат", затем сцепил эти данные, получив уникальное значение (Лист "Результат" гр.4"D", такой же как и на листе "Данные",
сцепил "счета ДЗ" + "Тип" + "ИНН", в гр.12"L"). После чего, на листе "Результат", в каждой ячейке в гр.9-32"I-AF", прописал формулу "суммеслимн"
и в каждую строку.
С формулами, у меня получилось, но файл стал громадным и компьютер зависал при его расчетах.
Можно это переложить на макрос?
Вложения
Тип файла: rar Шаблон_ДЗ.rar (239.0 Кб, 13 просмотров)
amadeus017 вне форума Ответить с цитированием
Старый 01.11.2015, 15:41   #2
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию

Данная тема размещена на других форумах, но без результатно (в т.ч. и этот форум).

http://www.planetaexcel.ru/forum/ind...203-perenos-da...
http://www.programmersforum.ru/showthread.php?t=284362
http://www.excel-vba.ru/forum/index.php?topic=4139.0
http://www.cyberforum.ru/ms-excel/thread1567914.html
http://www.excelworld.ru/forum/10-19856-1
amadeus017 вне форума Ответить с цитированием
Старый 01.11.2015, 16:09   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

не мудрено...

полагаю, не у всех хватило силы дочитать до конца Ваше первое сообщение, не говоря уже о том, что потом еще открыть файл, сверять надписи в сообщении с данными в файле и снова пытаться это осмыслить...

не знаю как остальные, особенно, на других форумах, но думаю задача не решена не потому, что очень сложная, а потому что никто за нее не брался

много текста, меня отпугнуло именно это
и, видимо, поэтому первый ответ в Вашей теме был от Вас же
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 01.11.2015, 16:27   #4
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию

Задача сводится к тому, что на лист "Результат", нужно разнести по колонкам (графам) данные из листа "Данные". На данный момент, в каждой ячейки стоит формула, "суммеслимн", которую и хочется заменить макросом (чтоб комп не зависал). Все остальное, можно сделать вручную (все, что до переноса данных).
amadeus017 вне форума Ответить с цитированием
Старый 01.11.2015, 22:20   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

у Вас на листе данные в 14-й колонке формула выглядит так:
Код:
=ЕСЛИ(И(RC[-1]<1);"01";ЕСЛИ(И(RC[-1]>=1;RC[-1]<2);"02";ЕСЛИ(И(RC[-1]>=2;RC[-1]<3);"03";ЕСЛИ(И(RC[-1]>=3;RC[-1]<4);"04";ЕСЛИ(И(RC[-1]>=4;RC[-1]<5);"05";ЕСЛИ(И(RC[-1]>=5;RC[-1]<6);"06";ЕСЛИ(И(RC[-1]>=6;RC[-1]<7);"07";ЕСЛИ(И(RC[-1]>=7;RC[-1]<8);"08";ЕСЛИ(И(RC[-1]>=8;RC[-1]<9);"09";ЕСЛИ(И(RC[-1]>=9;RC[-1]<10);"10";ЕСЛИ(И(RC[-1]>=10;RC[-1]<11);"11";ЕСЛИ(И(RC[-1]>=11;RC[-1]<12);"12";ЕСЛИ(И(RC[-1]>=12;RC[-1]<15);"13";ЕСЛИ(И(RC[-1]>=15;RC[-1]<18);"14";ЕСЛИ(И(RC[-1]>=18;RC[-1]<21);"15";ЕСЛИ(И(RC[-1]>=21;RC[-1]<24);"16";ЕСЛИ(И(RC[-1]>=24;RC[-1]<27);"17";ЕСЛИ(И(RC[-1]>=27;RC[-1]<30);"18";ЕСЛИ(И(RC[-1]>=30;RC[-1]<33);"19";ЕСЛИ(И(RC[-1]>=33;RC[-1]<36);"20";ЕСЛИ(И(RC[-1]>=36;RC[-1]<48);"21";ЕСЛИ(И(RC[-1]>=48;RC[-1]<60);"22";ЕСЛИ(И(RC[-1]>=60;RC[-1]<72);"23";ЕСЛИ(И(RC[-1]>=72);"24"))))))))))))))))))))))))
ни много, ни мало 24 вложенных ЕСЛИ
предлагаю ее заменить формулой из 2 ЕСЛИ:
Код:
=ЕСЛИ(RC[-1]>36;МИН(24;20+ОКРВВЕРХ((RC[-1]-36)/12;1));ЕСЛИ(RC[-1]>12;12+ОКРВВЕРХ((RC[-1]-12)/3;1);ОКРВВЕРХ(RC[-1];1)))
это раз!
разница в результатах только в том, что у Вас значения <10 возвращались как строки с лидирующим нулем, а моя формула возвращает числа от 1 до 24, которые так же легко посчитать как и строки "01", "02", "03" ... "09", "10" ... "24"
вообщем-то строки тоже элементарно получить (не очень усложняя формулу):
Код:
=ТЕКСТ(ЕСЛИ(RC[-1]>36;МИН(24;20+ОКРВВЕРХ((RC[-1]-36)/12;1));ЕСЛИ(RC[-1]>12;12+ОКРВВЕРХ((RC[-1]-12)/3;1);ОКРВВЕРХ(RC[-1];1)));"00")
только зачем???? числа от 1 до 24 поддаются такой же обработке...

второе:
зачем Вы собираете ключ из Счет ДЗ + Тип + ИНН???
если во всех строках Тип = "Н-001", а ИНН = "-"
какой смысл в этом действии????? если поле Счет ДЗ - уже есть ключом
или реальных данных гораздо больше и там РЕАЛЬНО для одного счета ДЗ есть разные Тип и ИНН???
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 02.11.2015, 00:40   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Есть похожие макросы на кибере и на excelworld.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 02.11.2015, 16:18   #7
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию

Добрался до форума, чтобы посмотреть на мою тему и выразить всем свою благодарность за проделанную Вами, IgorGO и Hugo121, работу! Всегда прислушиваюсь к мнению IgorGo, и охотно пользуюсь его подсказками, в том числе и сейчас, хочу попробовать его подсказкой по формулам, я в своей практике, ранее такими не пользовался. Заодно отвечу, что в реальности, ИНН и Типы, разные, вот для чего нужна колонка "ключ", для формул которыми я воспользовался при расчетах.
На данную тему, помогли с ответом на других форумах, и прошу эту тему считать, закрытой. Помогли с макросом, который я сегодня попробовал в работе, пока все устраивает. Макрос, ниже.
amadeus017 вне форума Ответить с цитированием
Старый 02.11.2015, 16:18   #8
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию

Sub ertert()
Dim x, y(), i&, rw&, k$
x = Range("A2:B" & Cells(Rows.Count, 1).End(xlUp).Row).Value

With Sheets("Результат")
x = .Range("A7:C" & .Cells(Rows.Count, 1).End(xlUp).Row).Value
End With
ReDim y(1 To UBound(x), 1 To 24)

With CreateObject("Scripting.Dictionary" )
.CompareMode = 1
For i = 1 To UBound(x, 1)
k = x(i, 1) & x(i, 3) & x(i, 2) 'Счет ДЗ - Тип - ИНН
.Item(k) = i
Next i

With Sheets("Данные")
x = .Range("A10:N" & .Cells(Rows.Count, 1).End(xlUp).Row).Value
End With
For i = 1 To UBound(x, 1)
k = x(i, 1) & x(i, 2) & x(i, 10)
If .Exists(k) Then
rw = .Item(k)
y(rw, x(i, 14)) = y(rw, x(i, 14)) + x(i, 9)
End If
Next i
End With

With Sheets("Результат")
.Range("I7").Resize(UBound(y), 24).Value = y
.Activate
End With
End Sub
amadeus017 вне форума Ответить с цитированием
Старый 02.11.2015, 16:26   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Строка
x = Range("A2:B" & Cells(Rows.Count, 1).End(xlUp).Row).Value
лишняя, и ещё нужно позаботиться убрать возможные фильтры (я в своём варианте это сделал).
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 03.11.2015, 18:31   #10
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Строка
x = Range("A2:B" & Cells(Rows.Count, 1).End(xlUp).Row).Value
лишняя, и ещё нужно позаботиться убрать возможные фильтры (я в своём варианте это сделал).
Хорошо, попробую убрать эту строку и запустить макрос без неё.
amadeus017 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выборка данных, перенос строки на другой лист) Viten2 Microsoft Office Excel 1 03.05.2011 16:14
Перенос данных из строкив отдельные строки Palomnik1096 Microsoft Office Excel 5 31.03.2011 14:15
Выбрать из строки и распределить по столбцам Crystal78 Microsoft Office Excel 4 25.12.2010 23:00
Перенос данных из строки одной таблицы БД в другую БД Optigood БД в Delphi 15 12.05.2010 17:07
Поиск по имени столбца и сложение строки по найденным столбцам mihakr Microsoft Office Excel 2 12.03.2009 13:35