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

Вход

Регистрация

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

 

= Мир MS Excel/Перено-разброс и добавление выделенных ячеек на другой лист - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перено-разброс и добавление выделенных ячеек на другой лист (Макросы/Sub)
Перено-разброс и добавление выделенных ячеек на другой лист
zegor Дата: Четверг, 29.11.2018, 10:24 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 132
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
Привет, Excelworld. Есть макрос который я называю перенос-разброс. Отличный макрос. Проблема в том, что он каждый раз работает со всем объёмом исходных данных и заново переносит-разбрасывает их в конечный лист. Длится всё это около 20 минут. Может можно как-то делать перенос-разброс выделив нужную область данных (всегда 15 столбцов, количество строк разное) которая будет добавляться в конечный лист а не перезаписывать его? С VBA не дружу от слова совсем.
К сообщению приложен файл: optimize.xlsb (27.6 Kb)


Сообщение отредактировал zegor - Четверг, 29.11.2018, 13:25
 
Ответить
СообщениеПривет, Excelworld. Есть макрос который я называю перенос-разброс. Отличный макрос. Проблема в том, что он каждый раз работает со всем объёмом исходных данных и заново переносит-разбрасывает их в конечный лист. Длится всё это около 20 минут. Может можно как-то делать перенос-разброс выделив нужную область данных (всегда 15 столбцов, количество строк разное) которая будет добавляться в конечный лист а не перезаписывать его? С VBA не дружу от слова совсем.

Автор - zegor
Дата добавления - 29.11.2018 в 10:24
Апострофф Дата: Четверг, 29.11.2018, 11:12 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 448
Репутация: 124 ±
Замечаний: 0% ±

Excel 1997
всегда 26 столбцов

а в примере 17 - кому верить?
 
Ответить
Сообщение
всегда 26 столбцов

а в примере 17 - кому верить?

Автор - Апострофф
Дата добавления - 29.11.2018 в 11:12
_Boroda_ Дата: Четверг, 29.11.2018, 11:14 | Сообщение № 3
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
- Прочитайте Правила форума
- Исправьте название темы согласно п.2 Правил форума


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение- Прочитайте Правила форума
- Исправьте название темы согласно п.2 Правил форума

Автор - _Boroda_
Дата добавления - 29.11.2018 в 11:14
zegor Дата: Четверг, 29.11.2018, 11:17 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 132
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
Апострофф, поправил. В примере да, всего 17 но перенос-разброс 15 столбцов. Верить прикреплённому файлу. Спасибо за поправочку :)


Сообщение отредактировал zegor - Четверг, 29.11.2018, 13:24
 
Ответить
СообщениеАпострофф, поправил. В примере да, всего 17 но перенос-разброс 15 столбцов. Верить прикреплённому файлу. Спасибо за поправочку :)

Автор - zegor
Дата добавления - 29.11.2018 в 11:17
zegor Дата: Четверг, 29.11.2018, 11:22 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 132
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
_Boroda_, вы пинайте меня если не прав. В моих же интересах что бы меня поняли верно.

[offtop]Последний вариант кажется будет самым точным описанием[/offtop]


Сообщение отредактировал zegor - Четверг, 29.11.2018, 11:29
 
Ответить
Сообщение_Boroda_, вы пинайте меня если не прав. В моих же интересах что бы меня поняли верно.

[offtop]Последний вариант кажется будет самым точным описанием[/offtop]

Автор - zegor
Дата добавления - 29.11.2018 в 11:22
_Boroda_ Дата: Четверг, 29.11.2018, 15:25 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Попробуйте такой макрос
[vba]
Код
Option Compare Text
Sub tt()
    tt_ = Timer
    r0_ = 2
    c1_ = Cells(r0_, Columns.Count).End(1).Column
    c0_ = 1
    n1_ = Cells(Rows.Count, c1_).End(3).Row - r0_ + 1
    n0_ = Cells(Rows.Count, c0_).End(3).Row - r0_ + 1
    ar1 = Cells(r0_, c1_).Resize(n1_)
    ar0 = Cells(r0_, c0_).Resize(n0_, c1_ - 2)
    Application.ScreenUpdating = 0
    Application.Calculation = 3
    Set slov = CreateObject("Scripting.Dictionary")
    Set slov1 = CreateObject("Scripting.Dictionary")
    slov1.CompareMode = 1
    Set sh = Worksheets("zero")
    sh.Cells.Clear
    With slov
        For i = 1 To n1_
            If Not slov1.Exists(ar1(i, 1)) Then
                qqq = slov1.Item(ar1(i, 1))
                z_ = z_ + 1
                zz_ = 0
                For j = 1 To n0_
                    If ar1(i, 1) = ar0(j, 1) Or ar1(i, 1) = ar0(j, 2) Then
                        zz_ = zz_ + 1
                        .Item(zz_) = WorksheetFunction.Index(ar0, j, 0)
                    End If
                Next j
                If .Count Then
                    sh.Cells(1, 1 + (z_ - 1) * (c1_ - 1)).Resize(zz_, 15) = Application.Transpose(Application.Transpose(.Items))
                    .RemoveAll
                End If
            End If
        Next i
    End With
    Application.Calculation = 1
    Application.ScreenUpdating = 1
    MsgBox Timer - tt_
End Sub
[/vba]
[offtop]
вы пинайте меня

Встретились садист и мазохист
Мазохист - "Замучай меня!!!"
Садист - "Не буду!!!"[/offtop]
К сообщению приложен файл: 7484988.xlsm (48.2 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПопробуйте такой макрос
[vba]
Код
Option Compare Text
Sub tt()
    tt_ = Timer
    r0_ = 2
    c1_ = Cells(r0_, Columns.Count).End(1).Column
    c0_ = 1
    n1_ = Cells(Rows.Count, c1_).End(3).Row - r0_ + 1
    n0_ = Cells(Rows.Count, c0_).End(3).Row - r0_ + 1
    ar1 = Cells(r0_, c1_).Resize(n1_)
    ar0 = Cells(r0_, c0_).Resize(n0_, c1_ - 2)
    Application.ScreenUpdating = 0
    Application.Calculation = 3
    Set slov = CreateObject("Scripting.Dictionary")
    Set slov1 = CreateObject("Scripting.Dictionary")
    slov1.CompareMode = 1
    Set sh = Worksheets("zero")
    sh.Cells.Clear
    With slov
        For i = 1 To n1_
            If Not slov1.Exists(ar1(i, 1)) Then
                qqq = slov1.Item(ar1(i, 1))
                z_ = z_ + 1
                zz_ = 0
                For j = 1 To n0_
                    If ar1(i, 1) = ar0(j, 1) Or ar1(i, 1) = ar0(j, 2) Then
                        zz_ = zz_ + 1
                        .Item(zz_) = WorksheetFunction.Index(ar0, j, 0)
                    End If
                Next j
                If .Count Then
                    sh.Cells(1, 1 + (z_ - 1) * (c1_ - 1)).Resize(zz_, 15) = Application.Transpose(Application.Transpose(.Items))
                    .RemoveAll
                End If
            End If
        Next i
    End With
    Application.Calculation = 1
    Application.ScreenUpdating = 1
    MsgBox Timer - tt_
End Sub
[/vba]
[offtop]
вы пинайте меня

Встретились садист и мазохист
Мазохист - "Замучай меня!!!"
Садист - "Не буду!!!"[/offtop]

Автор - _Boroda_
Дата добавления - 29.11.2018 в 15:25
zegor Дата: Четверг, 29.11.2018, 17:07 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 132
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
_Boroda_, предложенный вами макрос делает то же самое что и "старый". Открываю лист Zero, удаляю всё что в нём есть. Открываю Лист1, выделяю массив А57:О57, Alt+F8. Вижу что макрос работал с массивом А2:О57

Проблема в том, что он каждый раз работает со всем объёмом исходных данных и заново переносит-разбрасывает их в конечный лист.

Нужно что бы он "хватал" выделенную область (например я выделяю массив А57:О57) и перебрасывал в лист Zero только её. Те самые 15 столбцов. Но это одна строка, а их может выделяться и 50. Всё это для того что бы макрос не таскал всё что есть каждый раз заново по 20 минут.
К сообщению приложен файл: optimize_2.xlsm (49.3 Kb)


Сообщение отредактировал zegor - Четверг, 29.11.2018, 17:09
 
Ответить
Сообщение_Boroda_, предложенный вами макрос делает то же самое что и "старый". Открываю лист Zero, удаляю всё что в нём есть. Открываю Лист1, выделяю массив А57:О57, Alt+F8. Вижу что макрос работал с массивом А2:О57

Проблема в том, что он каждый раз работает со всем объёмом исходных данных и заново переносит-разбрасывает их в конечный лист.

Нужно что бы он "хватал" выделенную область (например я выделяю массив А57:О57) и перебрасывал в лист Zero только её. Те самые 15 столбцов. Но это одна строка, а их может выделяться и 50. Всё это для того что бы макрос не таскал всё что есть каждый раз заново по 20 минут.

Автор - zegor
Дата добавления - 29.11.2018 в 17:07
_Boroda_ Дата: Четверг, 29.11.2018, 17:19 | Сообщение № 8
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Проблема в том, что он каждый раз работает со всем объёмом

Неверно. проблема в том, что макрос написано коряво немного странно. Вы его где взяли?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Проблема в том, что он каждый раз работает со всем объёмом

Неверно. проблема в том, что макрос написано коряво немного странно. Вы его где взяли?

Автор - _Boroda_
Дата добавления - 29.11.2018 в 17:19
zegor Дата: Четверг, 29.11.2018, 17:43 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 132
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
_Boroda_, подскажите пожалуйста такую вещь- в предложенном вами макросе всё построено на том что рабочие столбцы это 1-15 а база имён в 17-ом столбце. Пытаюсь под свою книгу адаптировать. У меня рабочие столбцы 1-26 а база имён в столбце 60 (BH который). Ткните носом где заменить число что бы ваш макрос не выдавал ошибку Type mismatch. [vba]
Код
sh.Cells(1, 1 + (z_ - 1) * (c1_ - 1)).Resize(zz_, 15) = Application.Transpose(Application.Transpose(.Items))
[/vba] уже заменил на [vba]
Код
sh.Cells(1, 1 + (z_ - 1) * (c1_ - 1)).Resize(zz_, 26) = Application.Transpose(Application.Transpose(.Items))
[/vba]

[offtop]Да уж и не вспомню сейчас где взял макрос, давно это было. Разрослась "база данных" вот и стал он медленным.[/offtop]


Сообщение отредактировал zegor - Четверг, 29.11.2018, 18:44
 
Ответить
Сообщение_Boroda_, подскажите пожалуйста такую вещь- в предложенном вами макросе всё построено на том что рабочие столбцы это 1-15 а база имён в 17-ом столбце. Пытаюсь под свою книгу адаптировать. У меня рабочие столбцы 1-26 а база имён в столбце 60 (BH который). Ткните носом где заменить число что бы ваш макрос не выдавал ошибку Type mismatch. [vba]
Код
sh.Cells(1, 1 + (z_ - 1) * (c1_ - 1)).Resize(zz_, 15) = Application.Transpose(Application.Transpose(.Items))
[/vba] уже заменил на [vba]
Код
sh.Cells(1, 1 + (z_ - 1) * (c1_ - 1)).Resize(zz_, 26) = Application.Transpose(Application.Transpose(.Items))
[/vba]

[offtop]Да уж и не вспомню сейчас где взял макрос, давно это было. Разрослась "база данных" вот и стал он медленным.[/offtop]

Автор - zegor
Дата добавления - 29.11.2018 в 17:43
zegor Дата: Четверг, 29.11.2018, 18:40 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 132
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
12 минут макрос считает. И почему-то не 300 имён из столбца Q взял для сортировки а 251.

До меня дошло- прежний макрос, тот который корявый (просто уточняю), брал всё что видел и сортировал на листе zero из расчёта [vba]
Код
MyArr = Cells(2, 17).Resize(71).Value
[/vba] где я мог и 300 вместо 71 указать. Сейчас же, с новым макросом, я даже не представляю как это сделать. Дело в том что у меня почти тысяча имён для сортировки (столбец Q), и прежним макросом я отсекал по 300 имён для операции перенос-разброс. Делал это для того что бы 300 в лист zero, следующие 300 в лист zero1 шли и так далее. Прошу сильно не пинать за столь позднее уточнение и нюансы.
 
Ответить
Сообщение12 минут макрос считает. И почему-то не 300 имён из столбца Q взял для сортировки а 251.

До меня дошло- прежний макрос, тот который корявый (просто уточняю), брал всё что видел и сортировал на листе zero из расчёта [vba]
Код
MyArr = Cells(2, 17).Resize(71).Value
[/vba] где я мог и 300 вместо 71 указать. Сейчас же, с новым макросом, я даже не представляю как это сделать. Дело в том что у меня почти тысяча имён для сортировки (столбец Q), и прежним макросом я отсекал по 300 имён для операции перенос-разброс. Делал это для того что бы 300 в лист zero, следующие 300 в лист zero1 шли и так далее. Прошу сильно не пинать за столь позднее уточнение и нюансы.

Автор - zegor
Дата добавления - 29.11.2018 в 18:40
_Boroda_ Дата: Четверг, 29.11.2018, 20:35 | Сообщение № 11
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
12 минут макрос считает
Не может такого быть. Что показал таймер, встроенный в макрос? На старенькой машине на данных из первого файла Ваш макрос дал результат 0,595, мой - 0,062. На работе (там хорошая машина) мой отрабатывал за 0,0027
Сколько строк у Вас в столбце А?
почему-то не 300 имён из столбца Q взял для сортировки а 251
Обратите внимание на покраску розовым в моем файле. Это задвоения. Зачем Вам выводить дважды одинаковые показатели? У меня такие задвоения убираются, вот 49 значений и ушло
У меня рабочие столбцы 1-26 а база имён в столбце 60 (BH который)
Кто Вам мешал сделать пример именно с таким количеством и расположением столбцов?
Смотрите файл с новым расположением столбцов

Прошу сильно не пинать за столь позднее уточнение и нюансы.
А никто пинать и не собирается. Решение-то Вам нужно, а чем больше будет подобных уточнений, тем позже оно у Вас будет. А может, и вообще не будет

По поводу
Нужно что бы он "хватал" выделенную область (например я выделяю массив А57:О57) и перебрасывал в лист Zero только её
можно как-то делать перенос-разброс выделив нужную область данных (всегда 15 столбцов, количество строк разное) которая будет добавляться в конечный лист а не перезаписывать его?
Каким Вы представляете себе алгоритм поиска нужного блока? Ведь у Вас есть блок с парой Yuichi Tommy для Yuichi и для Tommy. Если Вам нужно добавить только Tommy, то как Вы эти блоки различать будете?
К сообщению приложен файл: 7484988_1.xlsb (43.3 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
12 минут макрос считает
Не может такого быть. Что показал таймер, встроенный в макрос? На старенькой машине на данных из первого файла Ваш макрос дал результат 0,595, мой - 0,062. На работе (там хорошая машина) мой отрабатывал за 0,0027
Сколько строк у Вас в столбце А?
почему-то не 300 имён из столбца Q взял для сортировки а 251
Обратите внимание на покраску розовым в моем файле. Это задвоения. Зачем Вам выводить дважды одинаковые показатели? У меня такие задвоения убираются, вот 49 значений и ушло
У меня рабочие столбцы 1-26 а база имён в столбце 60 (BH который)
Кто Вам мешал сделать пример именно с таким количеством и расположением столбцов?
Смотрите файл с новым расположением столбцов

Прошу сильно не пинать за столь позднее уточнение и нюансы.
А никто пинать и не собирается. Решение-то Вам нужно, а чем больше будет подобных уточнений, тем позже оно у Вас будет. А может, и вообще не будет

По поводу
Нужно что бы он "хватал" выделенную область (например я выделяю массив А57:О57) и перебрасывал в лист Zero только её
можно как-то делать перенос-разброс выделив нужную область данных (всегда 15 столбцов, количество строк разное) которая будет добавляться в конечный лист а не перезаписывать его?
Каким Вы представляете себе алгоритм поиска нужного блока? Ведь у Вас есть блок с парой Yuichi Tommy для Yuichi и для Tommy. Если Вам нужно добавить только Tommy, то как Вы эти блоки различать будете?

Автор - _Boroda_
Дата добавления - 29.11.2018 в 20:35
zegor Дата: Четверг, 29.11.2018, 22:08 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 132
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
Сколько строк у Вас в столбце А?
Пока 7628 . Запускаю Ваш последний макрос и Excel подвисает с сообщением в диспетчере задач Не отвечает. Процессор 2 ядра по 2,70 GHz, во время выполнения макроса грузит ЦП на 50%. ОЗУ 4 ГБ тоже где до 50%.
Обратите внимание на покраску розовым в моем файле.
Не нашел, может поторопились и сохранили файл без розовой заливки/текста (что там у Вас было).

По поводу следующих двух пунктов принял, исправлюсь.
Каким Вы представляете себе алгоритм поиска нужного блока?
Предлагаю такой вариант. В файлике добавил даты, цепляемся за них и таким образом определяем нужный блок. Например на листе zero уже есть часть таблицы за период 28.04.17-02.05.17 Теперь нужно пренести данные за 03.05.17 в лист zero. Может так получится реализовать хотелки.
К сообщению приложен файл: optimize_3.xlsb (39.5 Kb)
 
Ответить
Сообщение
Сколько строк у Вас в столбце А?
Пока 7628 . Запускаю Ваш последний макрос и Excel подвисает с сообщением в диспетчере задач Не отвечает. Процессор 2 ядра по 2,70 GHz, во время выполнения макроса грузит ЦП на 50%. ОЗУ 4 ГБ тоже где до 50%.
Обратите внимание на покраску розовым в моем файле.
Не нашел, может поторопились и сохранили файл без розовой заливки/текста (что там у Вас было).

По поводу следующих двух пунктов принял, исправлюсь.
Каким Вы представляете себе алгоритм поиска нужного блока?
Предлагаю такой вариант. В файлике добавил даты, цепляемся за них и таким образом определяем нужный блок. Например на листе zero уже есть часть таблицы за период 28.04.17-02.05.17 Теперь нужно пренести данные за 03.05.17 в лист zero. Может так получится реализовать хотелки.

Автор - zegor
Дата добавления - 29.11.2018 в 22:08
zegor Дата: Четверг, 29.11.2018, 23:01 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 132
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
В этот раз 16 минут считался. Никаких задвоений. 995 уникальных имён в столбце BH, раскидал в лист zero сколько влезло пока столбцы не закончились (606 имён). Как с остальными 389 быть? Макрос же не имеет границ по 60-му столбцу (который BH). Мне необходим этот лимит в 300 имён по столбцу BH. Не всё в один лист zero будет отправляться, а первых 300 в лист zero, следующие в zero2 и так все 995 имён. Для этого макрос просто дважды/трижды в лист вставлю, с другими конечными адресами (листами). Один и тот же массив просто разными вариантами одного макроса буду бросать, у каждого свой набор 300 имён.
 
Ответить
СообщениеВ этот раз 16 минут считался. Никаких задвоений. 995 уникальных имён в столбце BH, раскидал в лист zero сколько влезло пока столбцы не закончились (606 имён). Как с остальными 389 быть? Макрос же не имеет границ по 60-му столбцу (который BH). Мне необходим этот лимит в 300 имён по столбцу BH. Не всё в один лист zero будет отправляться, а первых 300 в лист zero, следующие в zero2 и так все 995 имён. Для этого макрос просто дважды/трижды в лист вставлю, с другими конечными адресами (листами). Один и тот же массив просто разными вариантами одного макроса буду бросать, у каждого свой набор 300 имён.

Автор - zegor
Дата добавления - 29.11.2018 в 23:01
_Boroda_ Дата: Четверг, 29.11.2018, 23:28 | Сообщение № 14
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Меня уже давно мучает вопрос - а зачем Вам это всё? Ну загрузили Вы на лист все это, что потом-то?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеМеня уже давно мучает вопрос - а зачем Вам это всё? Ну загрузили Вы на лист все это, что потом-то?

Автор - _Boroda_
Дата добавления - 29.11.2018 в 23:28
zegor Дата: Пятница, 30.11.2018, 10:00 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 132
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
Рядом будет ещё лист для которого zero источник данных. Может это и неправильно иметь базовый лист, таскать и сортировать ещё в один лист и всё это ради работы уже в третьем, но я так себе это представляю. Всё ради группировки данных по каждому имени с которыми потом можно работать.
 
Ответить
СообщениеРядом будет ещё лист для которого zero источник данных. Может это и неправильно иметь базовый лист, таскать и сортировать ещё в один лист и всё это ради работы уже в третьем, но я так себе это представляю. Всё ради группировки данных по каждому имени с которыми потом можно работать.

Автор - zegor
Дата добавления - 30.11.2018 в 10:00
zegor Дата: Понедельник, 03.12.2018, 10:58 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 132
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
Привет, Excelworld. Есть макрос который я называю перенос-разброс. Отличный макрос. Проблема в том, что он каждый раз работает со всем объёмом исходных данных и заново переносит-разбрасывает их в конечный лист. Длится всё это около 20 минут. Может можно как-то делать перенос-разброс выделив нужную область данных (всегда 26 столбцов, количество строк разное) которая будет добавляться в конечный лист а не перезаписывать его? С VBA не дружу от слова совсем.

В файл добавлены даты, может по ним будет проще это осуществить? Видимо перенос выделенной курсором области это совсем фантастика. _Boroda_ пытался помочь но что-то как-то не вышло к сожалению. В приложенном файле макрос "tt" от _Boroda_ из сообщений выше, ниже "perenos_razbros" с которым просил помощи изначально. Какой из вариантов будет реализован не принципиально (возможно именно Ваш).
К сообщению приложен файл: 5641846.xlsb (39.4 Kb)
 
Ответить
Сообщение
Привет, Excelworld. Есть макрос который я называю перенос-разброс. Отличный макрос. Проблема в том, что он каждый раз работает со всем объёмом исходных данных и заново переносит-разбрасывает их в конечный лист. Длится всё это около 20 минут. Может можно как-то делать перенос-разброс выделив нужную область данных (всегда 26 столбцов, количество строк разное) которая будет добавляться в конечный лист а не перезаписывать его? С VBA не дружу от слова совсем.

В файл добавлены даты, может по ним будет проще это осуществить? Видимо перенос выделенной курсором области это совсем фантастика. _Boroda_ пытался помочь но что-то как-то не вышло к сожалению. В приложенном файле макрос "tt" от _Boroda_ из сообщений выше, ниже "perenos_razbros" с которым просил помощи изначально. Какой из вариантов будет реализован не принципиально (возможно именно Ваш).

Автор - zegor
Дата добавления - 03.12.2018 в 10:58
zegor Дата: Четверг, 06.12.2018, 18:58 | Сообщение № 17
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 132
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
Всё ещё прошу помощи. :(
 
Ответить
СообщениеВсё ещё прошу помощи. :(

Автор - zegor
Дата добавления - 06.12.2018 в 18:58
zegor Дата: Среда, 12.12.2018, 14:37 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 132
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
Всё ещё прошу помощи :'(
 
Ответить
СообщениеВсё ещё прошу помощи :'(

Автор - zegor
Дата добавления - 12.12.2018 в 14:37
InExSu Дата: Суббота, 15.12.2018, 11:05 | Сообщение № 19
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
Привет!

Во вложении.
Сделал:
- ветхозаветную оптимизацию кода.
- наглядную агитацию
- работу по выделению. А если выделена одна ячейка, то обработаются все ячейки в столбце 17, как было у Вас.
К сообщению приложен файл: __optimize.xlsb (45.2 Kb)


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
СообщениеПривет!

Во вложении.
Сделал:
- ветхозаветную оптимизацию кода.
- наглядную агитацию
- работу по выделению. А если выделена одна ячейка, то обработаются все ячейки в столбце 17, как было у Вас.

Автор - InExSu
Дата добавления - 15.12.2018 в 11:05
zegor Дата: Воскресенье, 16.12.2018, 11:53 | Сообщение № 20
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 132
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте, InExSu. Спасибо за предложенное вами решение. Был приятно удивлен новым сообщением в теме. Но :( к сожалению
Цитата
Может можно как-то делать перенос-разброс выделив нужную область данных (всегда 15 столбцов, количество строк разное) которая будет добавляться в конечный лист а не перезаписывать его?
не решается.

Ваш макрос перезаписывает конечный лист zero в любом случае. Когда я выделяю нужный массив (в приложенном файле будет выделен красным шрифтом), запускаю Ваш код, получаю полностью перезаписанный конечный лист с данными только из выделенного массива. То есть макрос не добавляет эти данные в лист zero к уже имеющимся там а наглухо сносит "предшественников". К тому же работает с именами только из первого столбца, второй имеет такое же значение (по именам из него так же должны формироваться свои блоки в листе zero). Есть ещё момент- в случае если в выделенном массиве повторяется значение (имя из первого столбца), макрос принимает его как уникальное и делает, по сути, дубликат уже имеющегося блока для этого имени в листе zero. Например для Yuichi в листе zero есть три одинаковых блока, нужно что бы для каждого имени был только один блок.

Ещё раз спасибо за внимание к моей проблеме.
К сообщению приложен файл: InExSu_optimize.xlsb (33.9 Kb)
 
Ответить
СообщениеЗдравствуйте, InExSu. Спасибо за предложенное вами решение. Был приятно удивлен новым сообщением в теме. Но :( к сожалению
Цитата
Может можно как-то делать перенос-разброс выделив нужную область данных (всегда 15 столбцов, количество строк разное) которая будет добавляться в конечный лист а не перезаписывать его?
не решается.

Ваш макрос перезаписывает конечный лист zero в любом случае. Когда я выделяю нужный массив (в приложенном файле будет выделен красным шрифтом), запускаю Ваш код, получаю полностью перезаписанный конечный лист с данными только из выделенного массива. То есть макрос не добавляет эти данные в лист zero к уже имеющимся там а наглухо сносит "предшественников". К тому же работает с именами только из первого столбца, второй имеет такое же значение (по именам из него так же должны формироваться свои блоки в листе zero). Есть ещё момент- в случае если в выделенном массиве повторяется значение (имя из первого столбца), макрос принимает его как уникальное и делает, по сути, дубликат уже имеющегося блока для этого имени в листе zero. Например для Yuichi в листе zero есть три одинаковых блока, нужно что бы для каждого имени был только один блок.

Ещё раз спасибо за внимание к моей проблеме.

Автор - zegor
Дата добавления - 16.12.2018 в 11:53
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перено-разброс и добавление выделенных ячеек на другой лист (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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