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

Вход

Регистрация

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

 

= Мир MS Excel/Перемещение столбцов без копирования - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перемещение столбцов без копирования (Макросы/Sub)
Перемещение столбцов без копирования
Roman777 Дата: Четверг, 17.09.2015, 15:48 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Добрый день!
Подскажите, пожалуйста, возможно ли переместить столбцы без использования промежуточного копирования данных?
Поясню: необходимо, чтоб столбцы 2й и 4й поменялись местами (данные из столбца(2) стали во четвёртый столбец, а данные из столбца(4) во второй).


Много чего не знаю!!!!
 
Ответить
СообщениеДобрый день!
Подскажите, пожалуйста, возможно ли переместить столбцы без использования промежуточного копирования данных?
Поясню: необходимо, чтоб столбцы 2й и 4й поменялись местами (данные из столбца(2) стали во четвёртый столбец, а данные из столбца(4) во второй).

Автор - Roman777
Дата добавления - 17.09.2015 в 15:48
Pelena Дата: Четверг, 17.09.2015, 16:28 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19187
Репутация: 4421 ±
Замечаний: ±

Excel 365 & Mac Excel
Здравствуйте.
Макрорекодер подсказывает так
[vba]
Код
Sub Макрос1()
'
' Макрос1 Макрос
'

'
     Columns("B:B").Cut
     Columns("D:D").Insert Shift:=xlToRight
     Columns("D:D").Cut
     Columns("B:B").Insert Shift:=xlToRight
End Sub
[/vba]


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЗдравствуйте.
Макрорекодер подсказывает так
[vba]
Код
Sub Макрос1()
'
' Макрос1 Макрос
'

'
     Columns("B:B").Cut
     Columns("D:D").Insert Shift:=xlToRight
     Columns("D:D").Cut
     Columns("B:B").Insert Shift:=xlToRight
End Sub
[/vba]

Автор - Pelena
Дата добавления - 17.09.2015 в 16:28
Roman777 Дата: Четверг, 17.09.2015, 16:37 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Pelena, да, это я уже видел, но мне казалось, что тут происходит промежуточное копирование, а потом удаление столбца... по крайней мере, операция будет крайне долгой для большого кол-ва строк.
Я думал, мб бывает метод типа offset или аналог того, как листы легко можно перемещать внутри книги...


Много чего не знаю!!!!
 
Ответить
СообщениеPelena, да, это я уже видел, но мне казалось, что тут происходит промежуточное копирование, а потом удаление столбца... по крайней мере, операция будет крайне долгой для большого кол-ва строк.
Я думал, мб бывает метод типа offset или аналог того, как листы легко можно перемещать внутри книги...

Автор - Roman777
Дата добавления - 17.09.2015 в 16:37
Rioran Дата: Четверг, 17.09.2015, 17:36 | Сообщение № 4
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Roman777, здравствуйте.

Я бы сделал так, пример во вложении:

[vba]
Код
Sub RioSwap()
     Dim ArrA, ArrB, RowX&
     RowX = ActiveSheet.UsedRange.Rows.Count
     ArrA = Range("B1:B" & RowX)
     ArrB = Range("D1:D" & RowX)
     Range("B1:B" & RowX) = ArrB
     Range("D1:D" & RowX) = ArrA
End Sub
[/vba]
К сообщению приложен файл: RioSwap.xlsb (14.4 Kb)


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеRoman777, здравствуйте.

Я бы сделал так, пример во вложении:

[vba]
Код
Sub RioSwap()
     Dim ArrA, ArrB, RowX&
     RowX = ActiveSheet.UsedRange.Rows.Count
     ArrA = Range("B1:B" & RowX)
     ArrB = Range("D1:D" & RowX)
     Range("B1:B" & RowX) = ArrB
     Range("D1:D" & RowX) = ArrA
End Sub
[/vba]

Автор - Rioran
Дата добавления - 17.09.2015 в 17:36
Roman777 Дата: Четверг, 17.09.2015, 17:55 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Rioran, Я правильно понял, что тут мы просто записываем в память данные а потом из памяти кидаем в соответствующий столбик?
странно что ActiveSheet.UsedRange.Rows.Count выдаёт мне значение 10, когда у меня только 9 строк заполнены...
Спасибо большое, оч даже хороший Вариант, а я циклами делал...


Много чего не знаю!!!!
 
Ответить
СообщениеRioran, Я правильно понял, что тут мы просто записываем в память данные а потом из памяти кидаем в соответствующий столбик?
странно что ActiveSheet.UsedRange.Rows.Count выдаёт мне значение 10, когда у меня только 9 строк заполнены...
Спасибо большое, оч даже хороший Вариант, а я циклами делал...

Автор - Roman777
Дата добавления - 17.09.2015 в 17:55
Roman777 Дата: Четверг, 17.09.2015, 17:59 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Rioran, Подскажите вот ещё что, в Вашем коде, ArrA и ArrB объявлены как Variant, такой метод работает только при таком типе для данных переменных?


Много чего не знаю!!!!
 
Ответить
СообщениеRioran, Подскажите вот ещё что, в Вашем коде, ArrA и ArrB объявлены как Variant, такой метод работает только при таком типе для данных переменных?

Автор - Roman777
Дата добавления - 17.09.2015 в 17:59
Rioran Дата: Четверг, 17.09.2015, 18:15 | Сообщение № 7
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
мы просто записываем в память данные а потом из памяти кидаем в соответствующий столбик
Совершенно верно.

ActiveSheet.UsedRange.Rows.Count выдаёт мне значение 10
Значит, Вы как-то раз задействовали 10-ю строку, это нормально. Даже если Вы с 10-й строки потом значение стёрли.

ArrA и ArrB объявлены как Variant
Мой метод работает как минимум при этом типе переменной. В момент присвоения значения эти переменные превращаются в двумерные массивы. Конечно, переменные можно объявлять как массивы, но это не всегда удобно.


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279


Сообщение отредактировал Rioran - Четверг, 17.09.2015, 18:16
 
Ответить
Сообщение
мы просто записываем в память данные а потом из памяти кидаем в соответствующий столбик
Совершенно верно.

ActiveSheet.UsedRange.Rows.Count выдаёт мне значение 10
Значит, Вы как-то раз задействовали 10-ю строку, это нормально. Даже если Вы с 10-й строки потом значение стёрли.

ArrA и ArrB объявлены как Variant
Мой метод работает как минимум при этом типе переменной. В момент присвоения значения эти переменные превращаются в двумерные массивы. Конечно, переменные можно объявлять как массивы, но это не всегда удобно.

Автор - Rioran
Дата добавления - 17.09.2015 в 18:15
Roman777 Дата: Четверг, 17.09.2015, 21:14 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Rioran, ещё раз благодарю за столь подробные разъяснения)))


Много чего не знаю!!!!
 
Ответить
СообщениеRioran, ещё раз благодарю за столь подробные разъяснения)))

Автор - Roman777
Дата добавления - 17.09.2015 в 21:14
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перемещение столбцов без копирования (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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