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

Вход

Регистрация

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

 

= Мир MS Excel/Перенос данных по столбцам, объеденив строки - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перенос данных по столбцам, объеденив строки (Формулы/Formulas)
Перенос данных по столбцам, объеденив строки
amadeus017 Дата: Воскресенье, 01.11.2015, 08:54 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Доброго времени суток, уважаемые форумчане!
Возникла проблема, с которой хочу к вам обратиться.
Есть таблица, в которую загружаются данные по клиентам (лист "Данные"), нужно рассчитать период задолженности (сколько месяцев просрочки, гр.14"N") и
период задолженности в днях (гр.16 "P"), после чего, перенести полученные данные, на лист "Результат".
Что сделано:
На листе "Данные" в гр. 10-15 (J - Q), стоят формулы, которые рассчитываются каждую строку отдельно, по каждой сумме. Теперь необходимо, с листа
"Данные", перенести суммы, сгруппировав по клиентам. Группировку по клиентам, я сделал путем сводной таблицы (Лист1 гр.1-3"A-C"), полученные значения (счет, Тип, ИНН),
перенес на лист Результат", после, сцепил эти значения (счет, Тип, ИНН), получив уникальное значение (Лист "Результат" гр.4"D", такой же как и на листе "Данные",
сцепил "счета ДЗ" + "Тип" + "ИНН", в гр.12"L"). Затем, на листе "Результат", в каждой ячейке в гр.9-32"I-AF", прописал формулу "суммеслимн" и в каждую строку.
С формулами, у меня получилось, но файл стал громадным и компьютер зависал при его расчетах (в реальной таблице, более 100'000 строк).
Возможно это переложить на макрос (перенос значений, а именно, замена функции "суммеслимн")?
К сообщению приложен файл: 6940180.xlsx (97.9 Kb)
 
Ответить
СообщениеДоброго времени суток, уважаемые форумчане!
Возникла проблема, с которой хочу к вам обратиться.
Есть таблица, в которую загружаются данные по клиентам (лист "Данные"), нужно рассчитать период задолженности (сколько месяцев просрочки, гр.14"N") и
период задолженности в днях (гр.16 "P"), после чего, перенести полученные данные, на лист "Результат".
Что сделано:
На листе "Данные" в гр. 10-15 (J - Q), стоят формулы, которые рассчитываются каждую строку отдельно, по каждой сумме. Теперь необходимо, с листа
"Данные", перенести суммы, сгруппировав по клиентам. Группировку по клиентам, я сделал путем сводной таблицы (Лист1 гр.1-3"A-C"), полученные значения (счет, Тип, ИНН),
перенес на лист Результат", после, сцепил эти значения (счет, Тип, ИНН), получив уникальное значение (Лист "Результат" гр.4"D", такой же как и на листе "Данные",
сцепил "счета ДЗ" + "Тип" + "ИНН", в гр.12"L"). Затем, на листе "Результат", в каждой ячейке в гр.9-32"I-AF", прописал формулу "суммеслимн" и в каждую строку.
С формулами, у меня получилось, но файл стал громадным и компьютер зависал при его расчетах (в реальной таблице, более 100'000 строк).
Возможно это переложить на макрос (перенос значений, а именно, замена функции "суммеслимн")?

Автор - amadeus017
Дата добавления - 01.11.2015 в 08:54
gling Дата: Воскресенье, 01.11.2015, 09:39 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2519
Репутация: 674 ±
Замечаний: 0% ±

2010
Поможет или нет но длинную формулу с ЕСЛИ() можно заменить на ПРОСМОТР() или ВПР()
К сообщению приложен файл: 2692975.xlsx (99.8 Kb)


ЯД-41001506838083
 
Ответить
СообщениеПоможет или нет но длинную формулу с ЕСЛИ() можно заменить на ПРОСМОТР() или ВПР()

Автор - gling
Дата добавления - 01.11.2015 в 09:39
amadeus017 Дата: Воскресенье, 01.11.2015, 10:32 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Поможет или нет но длинную формулу с ЕСЛИ() можно заменить на ПРОСМОТР() или ВПР()

Как не странно, но объем файла, уведичился :(
 
Ответить
Сообщение
Поможет или нет но длинную формулу с ЕСЛИ() можно заменить на ПРОСМОТР() или ВПР()

Как не странно, но объем файла, уведичился :(

Автор - amadeus017
Дата добавления - 01.11.2015 в 10:32
gling Дата: Воскресенье, 01.11.2015, 10:47 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2519
Репутация: 674 ±
Замечаний: 0% ±

2010
У меня уменьшился. На вашем примере из 98к стал 82к.
К сообщению приложен файл: 4132984.xlsx (81.1 Kb)


ЯД-41001506838083

Сообщение отредактировал gling - Воскресенье, 01.11.2015, 10:50
 
Ответить
СообщениеУ меня уменьшился. На вашем примере из 98к стал 82к.

Автор - gling
Дата добавления - 01.11.2015 в 10:47
amadeus017 Дата: Воскресенье, 01.11.2015, 11:22 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Главная задача все же, это перенос данных на другой лист, макросом (замена формулы "суммеслимн")
[moder]Почему тогда вопрос не в разделе по макросам? Перенесла[/moder]


Сообщение отредактировал Pelena - Воскресенье, 01.11.2015, 11:47
 
Ответить
СообщениеГлавная задача все же, это перенос данных на другой лист, макросом (замена формулы "суммеслимн")
[moder]Почему тогда вопрос не в разделе по макросам? Перенесла[/moder]

Автор - amadeus017
Дата добавления - 01.11.2015 в 11:22
amadeus017 Дата: Воскресенье, 01.11.2015, 15:41 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010


Сообщение отредактировал Manyasha - Понедельник, 02.11.2015, 10:47
 
Ответить
СообщениеДанная тема размещена на других форумах, но без результатно (в т.ч. и этот форум).

http://www.planetaexcel.ru/forum....s-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 в 15:41
amadeus017 Дата: Воскресенье, 01.11.2015, 16:28 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Задача сводится к тому, что на лист "Результат", нужно разнести по колонкам (графам) данные из листа "Данные". На данный момент, в каждой ячейки стоит формула, "суммеслимн", которую и хочется заменить макросом (чтоб комп не зависал). Все остальное, можно сделать вручную (все, что до переноса данных).
 
Ответить
СообщениеЗадача сводится к тому, что на лист "Результат", нужно разнести по колонкам (графам) данные из листа "Данные". На данный момент, в каждой ячейки стоит формула, "суммеслимн", которую и хочется заменить макросом (чтоб комп не зависал). Все остальное, можно сделать вручную (все, что до переноса данных).

Автор - amadeus017
Дата добавления - 01.11.2015 в 16:28
nilem Дата: Воскресенье, 01.11.2015, 18:20 | Сообщение № 8
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
amadeus017, привет
попробуйте так:
[vba]
Код
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
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеamadeus017, привет
попробуйте так:
[vba]
Код
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
[/vba]

Автор - nilem
Дата добавления - 01.11.2015 в 18:20
amadeus017 Дата: Воскресенье, 01.11.2015, 20:20 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
yes что-то получилось! Попробовал пару раз на маленькой таблице, все работает, надо попробовать на большой.
nilem
Большое спасибо за помощь новичку!!!
 
Ответить
Сообщениеyes что-то получилось! Попробовал пару раз на маленькой таблице, все работает, надо попробовать на большой.
nilem
Большое спасибо за помощь новичку!!!

Автор - amadeus017
Дата добавления - 01.11.2015 в 20:20
Hugo Дата: Понедельник, 02.11.2015, 00:48 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Не видел, сделал свой вариант - похожий, но другой:
[vba]
Код
Option Explicit

Sub tt()
    Dim a(), b(), c(), d As Object, i&, ii&, iL&, t$

    Set d = CreateObject("scripting.dictionary"): d.comparemode = 1
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    With Sheets("Данные")
        If .FilterMode Then .ShowAllData
        iL = .Range("L" & .Rows.Count).End(xlUp).Row
        a = .Range(.Range("I10"), .Range("I" & iL)).Value
        b = .Range(.Range("L10"), .Range("L" & iL)).Value
        c = .Range(.Range("N10"), .Range("N" & iL)).Value
    End With

    For i = 1 To UBound(a)
        t = b(i, 1) & "|" & c(i, 1)
        d.Item(t) = d.Item(t) + a(i, 1)
    Next
    Erase b, c

    With Sheets("Результат")
        If .FilterMode Then .ShowAllData
        iL = .Range("D" & .Rows.Count).End(xlUp).Row
        a = .Range(.Range("D7"), .Range("D" & iL)).Value
        For i = 9 To 33
            t = .Cells(5, i)
            For ii = 1 To UBound(a)
                .Cells(ii + 6, i) = d.Item(a(ii, 1) & "|" & t)
            Next: Next
    End With

    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = False

End Sub
[/vba]
На второй массив не хватило тепения :)
Но можно добавить, если вдруг понадобится ускорить.


excel@nxt.ru
webmoney: E265281470651 Z422237915069


Сообщение отредактировал Hugo - Понедельник, 02.11.2015, 00:51
 
Ответить
СообщениеНе видел, сделал свой вариант - похожий, но другой:
[vba]
Код
Option Explicit

Sub tt()
    Dim a(), b(), c(), d As Object, i&, ii&, iL&, t$

    Set d = CreateObject("scripting.dictionary"): d.comparemode = 1
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    With Sheets("Данные")
        If .FilterMode Then .ShowAllData
        iL = .Range("L" & .Rows.Count).End(xlUp).Row
        a = .Range(.Range("I10"), .Range("I" & iL)).Value
        b = .Range(.Range("L10"), .Range("L" & iL)).Value
        c = .Range(.Range("N10"), .Range("N" & iL)).Value
    End With

    For i = 1 To UBound(a)
        t = b(i, 1) & "|" & c(i, 1)
        d.Item(t) = d.Item(t) + a(i, 1)
    Next
    Erase b, c

    With Sheets("Результат")
        If .FilterMode Then .ShowAllData
        iL = .Range("D" & .Rows.Count).End(xlUp).Row
        a = .Range(.Range("D7"), .Range("D" & iL)).Value
        For i = 9 To 33
            t = .Cells(5, i)
            For ii = 1 To UBound(a)
                .Cells(ii + 6, i) = d.Item(a(ii, 1) & "|" & t)
            Next: Next
    End With

    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = False

End Sub
[/vba]
На второй массив не хватило тепения :)
Но можно добавить, если вдруг понадобится ускорить.

Автор - Hugo
Дата добавления - 02.11.2015 в 00:48
amadeus017 Дата: Понедельник, 02.11.2015, 19:24 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрался до форума, чтобы посмотреть на мою тему и выразить всем свою благодарность за проделанную Вами, работу!
nilem
Помогли с макросом, который я сегодня попробовал в работе, пока все устраивает.
 
Ответить
СообщениеДобрался до форума, чтобы посмотреть на мою тему и выразить всем свою благодарность за проделанную Вами, работу!
nilem
Помогли с макросом, который я сегодня попробовал в работе, пока все устраивает.

Автор - amadeus017
Дата добавления - 02.11.2015 в 19:24
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перенос данных по столбцам, объеденив строки (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

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