2010-12-08 5 views
2

Я записал простой макрос, который мне нужно сделать во что-то общее, поэтому его можно использовать для любой строки и последних четырех ячеек. Вот мой recroded версия:Excel Macro: записать записанную ячейку меньше?

Selection.End(xlToRight).Select 
Selection.End(xlToRight).Select 
Selection.End(xlToRight).Select 
Selection.End(xlToRight).Select 
Selection.End(xlToLeft).Select 
Range("Q12:T12").Select 
Range("T12").Activate 
Selection.Copy 

End Sub

Как

  • сделать его к последней ячейке ROW я поместить курсор в?
  • изменяет диапазоны конкретных ячеек на диапазон, который просто означает: выберите эту ячейку и еще 3 влево?

... selection.copy Я думаю, что я могу почти управлять :)

Большое спасибо Майк

+1

PRO TIP: Если вы используете Excel для Windows, вы можете записывать макросы в СООТНЕСЕННОМ режиме вместо АБСОЛЮТНОГО режиме и получить запись, в которой все ссылки на ячейки имеют отношение к начальному выбору вместо абсолютного. – 2010-12-09 02:30:46

+0

Отличный совет, я обязательно буду использовать это в следующий раз. Спасибо – RocketGoal 2010-12-09 08:54:39

ответ

5

Это скопирует последние четыре ячейки в любой строке вы щелкаете на:

Sub CopyLastFourCellsOfRow() 
Dim lastCell As Range 
Dim rngToCopy As Range 

Set lastCell = Selection.End(xlToRight) 
Set rngToCopy = Range(lastCell, lastCell.Offset(0, -3)) 

rngToCopy.Copy 

End Sub 

Обновление - Если ваша строка имеет сломанные данные, лучший способ - начать в конечном столбце таблицы (столбец IV), а затем вернуться назад. Для достижения этой цели заменить lastCell заявление следующего содержания:

Set lastCell = Cells(Selection.Row, 256).End(xlToLeft) 
+0

Многочисленный aprreciated. – RocketGoal 2010-12-09 08:56:30

4

Вы действительно можете сделать отдельные шаги, вы спрашиваете обо всем в одном быстром движении. Чтобы перейти в последнюю ячейку текущей строки, вы просто используете ActiveCell.End (xlToRight). (Используйте «ActiveCell», потому что это эквивалентно «Выбор», когда выбран только один сотовый, но работает, даже если несколько ячеек выбраны.)

Range(ActiveCell, ActiveCell.Offset(0, -3)).Select 

будет выбрать текущую ячейку и более 3 влево. Обратите внимание, что вам не нужно делать «Selection.Copy» на отдельном шаге. Вы можете просто пойти:

Range(ActiveCell, ActiveCell.Offset(0, -3)).Copy