使用Range.End属性扩展多单元格范围

时间:2019-02-06 11:59:31

标签: excel vba

使用以下数据,并在宏记录器中记录以下操作,将产生以下代码:

Ctrl + C 
Ctrl + Shift + Right Arrow 
Ctrl + R

Starting data with single-cell range selected

Sub Macro1()
    Selection.Copy
    Range(Selection, Selection.End(xlToRight)).Select
    Application.CutCopyMode = False
    Selection.FillRight
End Sub

Data after entering above keyboard strokes

这是我所期望的。当选择多个单元格时,如下图所示,执行完全相同的键盘笔触可获得相同的结果,并在宏记录器中产生相同的代码。但是,当选择多个单元格时,重用此代码不会产生该结果。为什么Range.End属性在这种情况下不起作用,即扩展多像元范围?

Starting data with multi-cell range selected

3 个答案:

答案 0 :(得分:0)

Sub copyfill()
With ThisWorkbook.Sheets(REFERENCE)
    LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
    .Range(.Cells(1,"B"),.Cells(1,LastCol).Value = .Cells(1,1).Value
End With
End Sub

也许不是您问题的答案,但这是相同的。希望对您有所帮助。

正如Luuklag已经提到的那样,如果要自动填充范围,则必须将其附加到连续范围。在col A中填充一些连续的单元格,然后在B1中添加一个值。 Col B将自动填充,没有任何问题。仅尝试例如A1A20已填充,您会注意到col B直到第20行才会自动填充。

答案 1 :(得分:0)

获取最新消息

尝试一下:

  • 为最后一个非空列声明一个ActiveCell之间的间隔范围;
  • 对每个区域使用 输入范围内每个单元格中的所有值。

    Public Sub copyLastColumn()
    Dim val As Variant: val = Selection.Value
    Dim sh As Worksheet: Set sh = ThisWorkbook.Worksheets(1)
    
    Dim rng As Range: Set rng = sh.Range(ActiveCell, _
                                     sh.Cells(ActiveCell.Row, 
    sh.Cells(ActiveCell.Row, sh.Columns.Count).End(xlToLeft).Column))
    
    For Each el In rng
        el.Value = val
    Next el
    End Sub
    

答案 2 :(得分:0)

发生这种情况是因为宏中的命令的意思是:

  1. 选择=范围(“ A1”)
  2. Range(Selection,Selection.End(xlToRight))。Select = Range(“ A1”,Range(“ A1”)。End(xlToRight))。Select

这意味着“从单元格A1到行1中包含数据的最后一个单元格的选择”。

在启动宏之前,您必须区分宏第1行中的选择-这是Range(“ A1”)和用鼠标做出的选择!

这就是为什么当您选择2个相邻单元格中包含值的原因时,您认为宏什么也不做-但是宏确实起作用-如果您在单元格中有不同的值,您可能会因此而被定罪-例如Start in A1 and A2中的ST-启动宏后,您将看到此单元格中的值变为“开始”和“开始”

您可以查看以下网址以了解更多信息:https://docs.microsoft.com/en-us/office/vba/api/excel.range.end