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

Вход

Регистрация

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

 

= Мир MS Excel/Добавление диапазона с одного листа на другой - Мир MS Excel

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

Excel 2010
Прошу помощи.
Нужно добавить диапазон из одного листа на другой при условии изменения номера этапа.

Чтобы было яснее, прикладываю файл.

Жду помощи.
К сообщению приложен файл: ___.xlsm (22.6 Kb)
 
Ответить
СообщениеПрошу помощи.
Нужно добавить диапазон из одного листа на другой при условии изменения номера этапа.

Чтобы было яснее, прикладываю файл.

Жду помощи.

Автор - den45444
Дата добавления - 11.08.2015 в 01:34
miver Дата: Вторник, 11.08.2015, 09:40 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
den45444, Можно так
К сообщению приложен файл: tmp.xlsm (29.5 Kb)
 
Ответить
Сообщениеden45444, Можно так

Автор - miver
Дата добавления - 11.08.2015 в 09:40
den45444 Дата: Вторник, 11.08.2015, 11:01 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
miver,
Можно так

А где сам макрос?
 
Ответить
Сообщениеmiver,
Можно так

А где сам макрос?

Автор - den45444
Дата добавления - 11.08.2015 в 11:01
miver Дата: Вторник, 11.08.2015, 11:11 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
den45444, Внутри :) Попробуйте поменять номер ЭТАПА на вкладке "Этап1"


Сообщение отредактировал miver - Вторник, 11.08.2015, 11:11
 
Ответить
Сообщениеden45444, Внутри :) Попробуйте поменять номер ЭТАПА на вкладке "Этап1"

Автор - miver
Дата добавления - 11.08.2015 в 11:11
den45444 Дата: Вторник, 11.08.2015, 11:27 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Внутри Попробуйте поменять номер ЭТАПА на вкладке "Этап1"

Да - добавляется.
Вы изменили значение "Итого:" на "Итого (этап №)", а нельзя просто оставить "Итого:"?
И почему-то первую ячейку (в столбце наименование работ) выделяет жирным.
 
Ответить
Сообщение
Внутри Попробуйте поменять номер ЭТАПА на вкладке "Этап1"

Да - добавляется.
Вы изменили значение "Итого:" на "Итого (этап №)", а нельзя просто оставить "Итого:"?
И почему-то первую ячейку (в столбце наименование работ) выделяет жирным.

Автор - den45444
Дата добавления - 11.08.2015 в 11:27
miver Дата: Вторник, 11.08.2015, 12:04 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
Вы изменили значение "Итого:" на "Итого (этап №)"
Я ничего не менял - просто скопировал с источника. Можете сами прописать
[vba]
Код
                        If InStr(1, arr(i, 1), "Итого") > 0 Then
                             ReDim Preserve rez(1 To UBound(rez), 1 To UBound(rez, 2) + 1)
                             rez(1, UBound(rez, 2)) = "Итого:" // было arr(i, 1)
                             rez(5, UBound(rez, 2)) = arr(i, 7)
                             Exit For
                         ElseIf Not arr(i, 1) = "" Then
[/vba]
выделяет жирным
Макрос не меняет форматирование, а просто вставляет данные. Поменяйте формат, как Вам хочется - он сохранится ;)
 
Ответить
Сообщение
Вы изменили значение "Итого:" на "Итого (этап №)"
Я ничего не менял - просто скопировал с источника. Можете сами прописать
[vba]
Код
                        If InStr(1, arr(i, 1), "Итого") > 0 Then
                             ReDim Preserve rez(1 To UBound(rez), 1 To UBound(rez, 2) + 1)
                             rez(1, UBound(rez, 2)) = "Итого:" // было arr(i, 1)
                             rez(5, UBound(rez, 2)) = arr(i, 7)
                             Exit For
                         ElseIf Not arr(i, 1) = "" Then
[/vba]
выделяет жирным
Макрос не меняет форматирование, а просто вставляет данные. Поменяйте формат, как Вам хочется - он сохранится ;)

Автор - miver
Дата добавления - 11.08.2015 в 12:04
den45444 Дата: Вторник, 11.08.2015, 12:11 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Я ничего не менял - просто скопировал с источника. Можете сами прописать

Понятно. Благодарю.
А как сделать, чтобы все менялось по запросу, т.е. по нажатии кнопки?
 
Ответить
Сообщение
Я ничего не менял - просто скопировал с источника. Можете сами прописать

Понятно. Благодарю.
А как сделать, чтобы все менялось по запросу, т.е. по нажатии кнопки?

Автор - den45444
Дата добавления - 11.08.2015 в 12:11
den45444 Дата: Вторник, 11.08.2015, 12:20 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
miver, Не подскажете как прописать код, чтобы нижний текст, при добавлении строк, смещался вниз на кол-во добавленных строк этапа.
Сейчас добавляется этап, но все что находится ниже стирается.
 
Ответить
Сообщениеmiver, Не подскажете как прописать код, чтобы нижний текст, при добавлении строк, смещался вниз на кол-во добавленных строк этапа.
Сейчас добавляется этап, но все что находится ниже стирается.

Автор - den45444
Дата добавления - 11.08.2015 в 12:20
miver Дата: Вторник, 11.08.2015, 12:53 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
по нажатии кнопки

Копируете код в отдельную процедуру, например
[vba]
Код
Sub perenos()
      'Тут вставляем код
End Sub
[/vba]
Вставляете на лист автофигуру или кнопку и назначаете ей макрос perenos (правая кнопка и соответствующий пункт меню для автофигуры)

смещался вниз на кол-во добавленных строк этапа
Для этого нужно удалить очищение
[vba]
Код
'            EndRow = Range("A1000").End(xlUp).Row
'            If EndRow > 5 Then Range("A6", "E" & EndRow).ClearContents
[/vba]
И добавить строчку перед выгрузкой на лист
[vba]
Код
            Rows("6:" & 4 + UBound(rez, 2)).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
              Range("A5", Range("A5").Offset(UBound(rez, 2) - 1, UBound(rez) - 1).Address).Rows.Value = Application.Transpose(rez)
          End If
[/vba]


Сообщение отредактировал miver - Вторник, 11.08.2015, 12:54
 
Ответить
Сообщение
по нажатии кнопки

Копируете код в отдельную процедуру, например
[vba]
Код
Sub perenos()
      'Тут вставляем код
End Sub
[/vba]
Вставляете на лист автофигуру или кнопку и назначаете ей макрос perenos (правая кнопка и соответствующий пункт меню для автофигуры)

смещался вниз на кол-во добавленных строк этапа
Для этого нужно удалить очищение
[vba]
Код
'            EndRow = Range("A1000").End(xlUp).Row
'            If EndRow > 5 Then Range("A6", "E" & EndRow).ClearContents
[/vba]
И добавить строчку перед выгрузкой на лист
[vba]
Код
            Rows("6:" & 4 + UBound(rez, 2)).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
              Range("A5", Range("A5").Offset(UBound(rez, 2) - 1, UBound(rez) - 1).Address).Rows.Value = Application.Transpose(rez)
          End If
[/vba]

Автор - miver
Дата добавления - 11.08.2015 в 12:53
den45444 Дата: Вторник, 11.08.2015, 17:14 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
miver, Никак не могу нормально собрать то что нужно.

Высылаю еще раз пример.

Не могли бы вы поправить макрос, чтобы при добавлении диапазона, смещалась вся нижняя часть (строка с "Итого" и текст после таблицы).
После добавления таблица тоже не растягивается.

К сообщению приложен файл: tmp-3-.xlsm (30.0 Kb)
 
Ответить
Сообщениеmiver, Никак не могу нормально собрать то что нужно.

Высылаю еще раз пример.

Не могли бы вы поправить макрос, чтобы при добавлении диапазона, смещалась вся нижняя часть (строка с "Итого" и текст после таблицы).
После добавления таблица тоже не растягивается.


Автор - den45444
Дата добавления - 11.08.2015 в 17:14
den45444 Дата: Вторник, 11.08.2015, 21:31 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
miver, Немного поправил макрос, но все равно выдает не так как надо. Сейчас в последней строке #нд выдает.

Прикрепил еще раз пример, как было, как должно стать. Может сейчас понятнее будет по примеру.
К сообщению приложен файл: 2270229.xlsm (29.5 Kb)
 
Ответить
Сообщениеmiver, Немного поправил макрос, но все равно выдает не так как надо. Сейчас в последней строке #нд выдает.

Прикрепил еще раз пример, как было, как должно стать. Может сейчас понятнее будет по примеру.

Автор - den45444
Дата добавления - 11.08.2015 в 21:31
den45444 Дата: Вторник, 11.08.2015, 23:57 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Вроде привел в порядок, но теперь появились 2 вопроса:
1. При изменении номера этапа не удаляет то что было добавлено, а прибавляет к существующим строкам.
2. Если выбираешь этап которого вообще не существует, то он копирует существующие строки и добавляет их над таблицей.

Вот файл.
Может кто-нибудь поможет разобраться.
Жду помощи.
К сообщению приложен файл: 2195337.xlsm (29.7 Kb)


Сообщение отредактировал den45444 - Вторник, 11.08.2015, 23:58
 
Ответить
СообщениеВроде привел в порядок, но теперь появились 2 вопроса:
1. При изменении номера этапа не удаляет то что было добавлено, а прибавляет к существующим строкам.
2. Если выбираешь этап которого вообще не существует, то он копирует существующие строки и добавляет их над таблицей.

Вот файл.
Может кто-нибудь поможет разобраться.
Жду помощи.

Автор - den45444
Дата добавления - 11.08.2015 в 23:57
den45444 Дата: Среда, 12.08.2015, 11:12 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010

Копируете код в отдельную процедуру, например
Sub perenos()
    'Тут вставляем код
End Sub


Вставляю код, но при выполнении выдает ошибку
 
Ответить
Сообщение

Копируете код в отдельную процедуру, например
Sub perenos()
    'Тут вставляем код
End Sub


Вставляю код, но при выполнении выдает ошибку

Автор - den45444
Дата добавления - 12.08.2015 в 11:12
miver Дата: Четверг, 13.08.2015, 09:51 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
den45444, Извините за отсутствие - был в дали от цивилизации :)
Сделал пример, который подходит под все ваши хотелки
Кроме
1. При изменении номера этапа не удаляет то что было добавлено, а прибавляет к существующим строкам

Для этого нужно определится до какой строки удалять ? Соотвецтвенно всегда ли есть строка "Все работы выполнены в срок."
К сообщению приложен файл: 5279881.xlsm (30.1 Kb)


Сообщение отредактировал miver - Четверг, 13.08.2015, 09:52
 
Ответить
Сообщениеden45444, Извините за отсутствие - был в дали от цивилизации :)
Сделал пример, который подходит под все ваши хотелки
Кроме
1. При изменении номера этапа не удаляет то что было добавлено, а прибавляет к существующим строкам

Для этого нужно определится до какой строки удалять ? Соотвецтвенно всегда ли есть строка "Все работы выполнены в срок."

Автор - miver
Дата добавления - 13.08.2015 в 09:51
den45444 Дата: Четверг, 13.08.2015, 12:18 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
miver, Благодарю. Все работает.

Но если кнопку переносишь на другой подобный лист, то все сбивается.
Как прописать макрос, чтобы он выполнял данное действие. Имя листа может быть разным, но оформление листа такое же. Имя листа откуда нужно переносить всегда будет называться "СМЕТА".
 
Ответить
Сообщениеmiver, Благодарю. Все работает.

Но если кнопку переносишь на другой подобный лист, то все сбивается.
Как прописать макрос, чтобы он выполнял данное действие. Имя листа может быть разным, но оформление листа такое же. Имя листа откуда нужно переносить всегда будет называться "СМЕТА".

Автор - den45444
Дата добавления - 13.08.2015 в 12:18
den45444 Дата: Четверг, 13.08.2015, 12:19 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Для этого нужно определится до какой строки удалять ? Соотвецтвенно всегда ли есть строка "Все работы выполнены в срок."


Добавил вот такой код:
[vba]
Код
    Dim firstRow&, lastRow&
     firstRow = 0: lastRow = 0
     lSt = Columns("A:A").Find(What:="Итого:").Row
     lSt1 = Columns("A:A").Find(What:="Наименование работ").Row
     lastRow = lSt - 2
     firstRow = lSt1 + 1
     If lastRow = 6 Then MsgBox "Добавьте этап": Exit Sub
     Rows(firstRow & ":" & lastRow).Delete
[/vba]
 
Ответить
Сообщение
Для этого нужно определится до какой строки удалять ? Соотвецтвенно всегда ли есть строка "Все работы выполнены в срок."


Добавил вот такой код:
[vba]
Код
    Dim firstRow&, lastRow&
     firstRow = 0: lastRow = 0
     lSt = Columns("A:A").Find(What:="Итого:").Row
     lSt1 = Columns("A:A").Find(What:="Наименование работ").Row
     lastRow = lSt - 2
     firstRow = lSt1 + 1
     If lastRow = 6 Then MsgBox "Добавьте этап": Exit Sub
     Rows(firstRow & ":" & lastRow).Delete
[/vba]

Автор - den45444
Дата добавления - 13.08.2015 в 12:19
miver Дата: Четверг, 13.08.2015, 12:51 | Сообщение № 17
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
все сбивается

Так не понятно, что сбивается и нет конкретики. Сам макрос не зависит от имени листа
Опишу какие данные он берет с листов
[vba]
Код
arr = Лист1.Range("A5", "I" & Лист1.Range("A1000").End(xlUp).Row).Value
[/vba]
Берем исходные данные. Где Лист1 - внутреннее название листа "СМЕТА". Можно заменить на Sheets("СМЕТА") тогда он будет искать лист с точно таким названием "СМЕТА"

Все остальное связано с текущем листом, куда вставлен непосредственно код
В ячейке "A3" Обязательно должен присутствовать знак "№". Справа от номера допускаются только число

Я добавил пример, который удаляет строки по пустой ячейке в столбике "A" после конца таблицы (выше "Все работы выполнены в срок.")
Соответственно, теперь нужна эта пустая ячейке в столбике "A"

Больше ничего не нужно.
В другую книгу лучше переносить копированием целого листа "Этап"
К сообщению приложен файл: 6571287.xlsm (32.4 Kb)


Сообщение отредактировал miver - Четверг, 13.08.2015, 12:54
 
Ответить
Сообщение
все сбивается

Так не понятно, что сбивается и нет конкретики. Сам макрос не зависит от имени листа
Опишу какие данные он берет с листов
[vba]
Код
arr = Лист1.Range("A5", "I" & Лист1.Range("A1000").End(xlUp).Row).Value
[/vba]
Берем исходные данные. Где Лист1 - внутреннее название листа "СМЕТА". Можно заменить на Sheets("СМЕТА") тогда он будет искать лист с точно таким названием "СМЕТА"

Все остальное связано с текущем листом, куда вставлен непосредственно код
В ячейке "A3" Обязательно должен присутствовать знак "№". Справа от номера допускаются только число

Я добавил пример, который удаляет строки по пустой ячейке в столбике "A" после конца таблицы (выше "Все работы выполнены в срок.")
Соответственно, теперь нужна эта пустая ячейке в столбике "A"

Больше ничего не нужно.
В другую книгу лучше переносить копированием целого листа "Этап"

Автор - miver
Дата добавления - 13.08.2015 в 12:51
den45444 Дата: Четверг, 13.08.2015, 13:06 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
miver, Понял. Благодарю.

А если кнопка будет находится совсем в другом месте, т.е. в другом листе, где часто мне нужно будет работать.
 
Ответить
Сообщениеmiver, Понял. Благодарю.

А если кнопка будет находится совсем в другом месте, т.е. в другом листе, где часто мне нужно будет работать.

Автор - den45444
Дата добавления - 13.08.2015 в 13:06
miver Дата: Четверг, 13.08.2015, 13:18 | Сообщение № 19
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
Тогда перед всеми Range, Rows и квадрадными скобками типа [A6] нужно поставить название листа выгрузки - Лист2. или Sheets("Этап").
 
Ответить
СообщениеТогда перед всеми Range, Rows и квадрадными скобками типа [A6] нужно поставить название листа выгрузки - Лист2. или Sheets("Этап").

Автор - miver
Дата добавления - 13.08.2015 в 13:18
den45444 Дата: Четверг, 13.08.2015, 14:26 | Сообщение № 20
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
miver, Благодарю за всю вашу помощь.
 
Ответить
Сообщениеmiver, Благодарю за всю вашу помощь.

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

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