Страницы: 1
RSS
Вопрос по поводу копированию в вставке и переносе данных
 
Добрый день всем! Подскажите, пожалуйста, кто знает.
Есть два столбца, один из них с данными, второй пустой. Мне нужно с одного скопировать данные в другой и потом те, что я скопировал, удалить с первого. Зажав Ctrl я выделяю нужные строчки затем копирую и вставляю в другой столбец. Те данные, что я вставил во 2-й столбец становятся выделенными синим, а те строки, с которых я копировал с первого столбца обведены пунктиром, т.е. показываются места откуда было копирование. Мне теперь эти данные с первого столбца нужно удалить. Можно ли как-то быстро выделить те места, что подсвечены пунктиром в 1-м столбце и удалить, что бы заново с помощью Ctrl не выбирать каждую нужную строчку отдельно? Имею ввиду может есть какая-то комбинация клавиш...

Спасибо заранее!
 
Ну можно, например, присвоить вашему диапазону имя (через диспетчер имен), и выбирать его из выпадающего списка.  
 
Код
Sub Макрос1()
Dim rSel As Range
Set rSel = Selection
rSel.Copy
[B1].PasteSpecial Paste:=xlPasteValues
rSel.Delete shift:=xlUp
End Sub
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Владимир, если Вас не затруднит, можно поподробней? Макрос я включил, но как именно он работает?
 
Выделяете ячейки в столбце и нажимаете макрос. То что выделено попадет в столбец В, а из исходного столбца, где делали выделение, удалится со сдвигом ячеек вверх.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Попробую описать подробнее. Есть 1С с продажами за день. Все эти продажи я переношу в Excel-отчет в один общий столбец. Потом из этого столбца мне нужно перенести отдельно аксессуары, моб. тел., чехлы, услуги в свои другие столбцы. У каждого (аксессуары, моб. тел., чехлы, услуги) свой отдельный слолбец. Каждый товар я сам выбираю в какой столбец перенести. По этому из общего столбца я выделяю, например, чехлы с помощью Ctrl и копирую в нужный столбец. Теперь с общего столбца мне их нужно удалить, так как они уже есть в столбце "Чехлы". Их может быть очень много и поэтому второй раз через Ctrl выбирать занимает время. В то время когда скопировал и вставил в общем столбце они выделены пунктиром, а в столбце "Чехлы" выделены синим. Я вот и думал, может есть возможность этот пунктир обратить в выделение и удалить одним нажатием. И очень важно что бы не строки, ячейки удалялись, а именно только содержимое в них, так как ломается целостность отчета и формулы в нем.
Если нужно выгружу сам отчет для примера.
Буду очень благодарен, если поможете!
Изменено: artem-fdrv - 31.05.2016 12:15:33
 
Вопросов много, но лучше начать с примера. Возможно можно сразу по разным столбцам раскидать.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
https://drive.google.com/file/d/0B1NkUhCQPSbnZmxfYUtDLVBPZXM/view?usp=sharing    -   Вот пример того, что я хочу. Слева ячеки с которых скопировано содержимое, справа - скопированное содержимое. Теперь с левых ячеек, которые выделены пунктиром нужно удалить содержимое, не удаляя самих ячеек.

https://drive.google.com/open?id=0B1NkUhCQPSbnR01xVFk3V0VPNHM - Это и сам отчет
 
Если не нужно удалять ячейки, то исправьте строку - rSel.Delete shift:=xlUp на
rSel.ClearContents
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Это что-то похожее но все равно я же не могу выбирать куда вставлять выбранные позиции.
А если попробовать по-другому...?

есть вот такой макрос, который позволяет вырезать несвязные диапазоны и вставлять куда нужно. то есть могу вырезать отдельные строки и вставить куда нужно. Это почти то что нужно. Но разница заключается в том, что когда вырезаешь из столбца А  в столбец В то в столбце В ячейки заполняются так как и вырезались из столбца А. То есть если вырезаны через одну строку то и вставляться будут через одну. А если копируешь из столбца А  в столбец В то в столбце В они идут одна под одной, хотя вырезаны были через одну. Пример ---  
https://drive.google.com/file/d/0B1NkUhCQPSbnZmxfYUtDLVBPZXM/view?usp=sharing

Можно ли как-то доработать этот макрос так что бы ячейки(строки) вставлялись как при копировании, одна под одной, то есть, вырезаться могут через одну/две/три, но вставляться одна за другой?
Код
Option Explicit
Public rCopyRange As Range, bCut As Boolean
Sub Copy_Areas()
    Set rCopyRange = Selection: bCut = False
End Sub
Sub Cut_Areas()
    Set rCopyRange = Selection: bCut = True
End Sub
Sub Paste_Areas()
    Dim rArea As Range, li As Long
    Debug.Print rCopyRange.Address
    For Each rArea In rCopyRange
        rArea.Copy Selection.Cells(1).Offset(rArea.Row - rCopyRange.Row, rArea.Column - rCopyRange.Column)
    Next rArea
    If bCut Then rCopyRange.Clear
End Sub
 
Примерно так...
Но тут получается проблемка с тем, что объединённые ячейки внизу (под удаляемыми ячейками) "ломаются"... Не сообразил как расширить диапазон...  :oops:
Можно заменить в коде:
Код
Application.DisplayAlerts = False ' блокируем сообщения excel (про объединённые ячейки)
rSel.Delete shift:=xlUp ' удаляем со сдвигом вверх
Application.DisplayAlerts = True
на:
Код
rSel.ClearContents
тогда перенесённые ячейки будут только очищаться и объединённые ячейки внизу не будут "ломаться"...
Успехов. И мне того же. Благодарю. :)
 
Ренат, спасибо огромное!!! Я немного передал макрос, сделал из двух один и получилось именно то, что я планировал!
Владимир, Вам тоже спасибо за помощь!!!
 
Проще:
Код
Public Sub www()
    On Error Resume Next
    With Selection
        .Copy Application.InputBox("Укажите ячейку куда копировать", Type:=8)
        .Clear
    End With
End Sub

artem-fdrv,  оформляйте код тегами, кнопка <...> на панели редактирования.
Я сам - дурнее всякого примера! ...
 
Возникла еще проблема, подскажите кто знает. Если данные вручную прописывать в строки и потом вырезать и вставлять их то все без проблем работает, а если скопировать из другого места то при вставке в excel выдает ошибку object variable o whith block variable not set. Вот пример кда
Код
Option Explicit
Public rCopyRange As Range, bCut As Boolean
Sub Copy_Areas()
ActiveSheet.Paste
Set rCopyRange = Selection: bCut = False
End Sub
Sub Cut_Areas()
Set rCopyRange = Selection: bCut = True
End Sub
Sub Paste_Areas()
Dim rArea As Range
ActiveSheet.Paste
rCopyRange.Copy
Selection.PasteSpecial Paste:=xlPasteValues
If bCut Then rCopyRange.Clear
End Sub
 
Цитата
если скопировать из другого места
копируете запуском этого макроса? или вручную?
Изменено: Ренат - 31.05.2016 18:06:47
Успехов. И мне того же. Благодарю. :)
 
Вручную,...
 
Т.е. rCopyRange у Вас не задаётся... А вставляете макросом, который "не находит" этот диапазон...? Я правильно понимаю?
Изменено: Ренат - 31.05.2016 18:23:08
Успехов. И мне того же. Благодарю. :)
 
Смотрите, если я вручную в excel начну вводить данные, просто печатать в строки то потом без проблем я могу вырезать и вставлять данные из ячеек. а если я, например, хочу какой-то текст скопировать из браузера или с 1с то когда Ctrl+V в Excel выдает ошибку object variable o whith block variable not set. Нажимаю Debug и подсвечивается строчка
Код
rCopyRange.Copy
 
Правильно выдаёт... Потому что этого диапазона нет... :)
Изменено: Ренат - 31.05.2016 18:33:45
Успехов. И мне того же. Благодарю. :)
 
А как правильно сделать что бы все как есть работало и можно было вставить данные из другого места?
 
Вы на Ctrl+V "повесили" запуск макроса "Paste_Areas"?
Если да, то уберите "эту связь", а макрос запускайте, например, кнопкой... или другой комбинацией... С комбинациями не советую дальше... кнопку лучше "нарисуйте"... или на панель Excel добавьте кнопку...
Успехов. И мне того же. Благодарю. :)
 
Цитата
Ренат написал:
кнопку лучше "нарисуйте"... или на панель Excel добавьте кнопку.

Подскажите как это сделать?
Изменено: artem-fdrv - 31.05.2016 19:01:51
 
Как сделать кнопку, что бы запускала и отключала макрос?
 
Это "уже другая история". Поиск Вам в помощь.
Вот тут, например, есть ответ:
http://www.planetaexcel.ru/techniques/3/59/
Успехов. И мне того же. Благодарю. :)
 
Цитата
artem-fdrv написал:
хочу какой-то текст скопировать из браузера или с 1с то когда Ctrl+V в Excel выдает ошибку object variable o whith block variable not set. Нажимаю Debug и подсвечивается строчка
- т. е. Вы где-то че-то копируете и потом вместо просто нажать Ctrl+V, пишете макрос, тулите его вместо зарезервированного сочетания Ctrl+V(отлично кстати работающего во всей ОС) и бодро пытаете форум "чтозана...?"? О, мудрейший!
Я сам - дурнее всякого примера! ...
Страницы: 1
Читают тему
Наверх