Vba Excel宏:是否使录制的单元格少一个指定的单元格?

Vba Excel宏:是否使录制的单元格少一个指定的单元格?,vba,excel,Vba,Excel,我已经录制了一个简单的宏,我需要将它转换成一些通用的东西,这样它就可以用于任何行和最后四个单元格。这是我重新编码的版本: 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(

我已经录制了一个简单的宏,我需要将它转换成一些通用的东西,这样它就可以用于任何行和最后四个单元格。这是我重新编码的版本:

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
端接头

我该怎么办

  • 让它转到我放置光标的行的最后一个单元格
  • 将特定于单元格的范围更改为仅意味着:选择此单元格和左侧的3个单元格
。。。selection.copy我想我几乎可以做到:)

非常感谢
Mike

这会将您单击的任意行中的最后四个单元格复制到:

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
更新-如果您的行有损坏的数据,那么最好的方法是从电子表格的最后一列(第四列)开始,然后返回。要实现此目的,请将
lastCell
语句替换为以下内容:

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

实际上,你可以在一个快速的动作中完成你所要求的各个步骤。 要使其转到当前行的最后一个单元格,只需使用ActiveCell.End(xlToRight)。(使用“ActiveCell”,因为当仅选择一个单元格时,它相当于“Selection”,但即使选择了多个单元格,它也可以工作。)

将选择当前单元格和左侧的3个单元格。请注意,您不需要在单独的步骤中执行“Selection.Copy”。你只需去:

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

专业提示:如果您使用的是Excel for Windows,您可以在相对模式而不是绝对模式下录制宏,并获得一个所有单元格引用都与开始选择相关而不是绝对的录制。很好的提示,我会确保下次使用这个。谢天谢地,这正是我希望得到的回答——包括教育在内的回答。非常感谢。有点小问题。有些行已经破坏了数据,所以有没有办法让它直接到达行的末尾,然后再返回?干杯。工作起来很有魅力。非常感谢,非常有帮助。
Range(ActiveCell, ActiveCell.Offset(0, -3)).Copy