复制到列中

时间:2018-09-26 10:03:56

标签: excel vba excel-vba copy range

我对较大的VBA宏的一部分有问题,所以没有;我不能用其他方式做到这一点。

我想将值复制到一个空列中,但只能复制工作表中的行数。

我希望它自动计算工作表中活动的行数,并将该行作为最后一行,但是我被卡住了,它不想做我想要的事。

下面是我正在使用的代码。

Sub Coppy_down()
Range("B3").Formula = "=Mid(A1, 11, 2)"
Range("B3").Value = Range("B3").Value
Range("B3").Copy Range("B3", Range("B" & Rows.Count).End(xlUp))

End Sub

我的数据看起来像这样(我找不到如何附加)

     A             B
  1  District: SE   
  2  Date         District
  3  8/17/2018    
  4  8/24/2018  
  5  8/31/2018  
  6  9/7/2018   
  7  9/14/2018  
  8  9/21/2018  
  9  9/28/2018

我想用SE填充单元格B3:B9,但不是因为它可能是B3:B4或B3:B15,所以它需要灵活一些。

谢谢

2 个答案:

答案 0 :(得分:2)

从工作表底部向上查找,找到A列的最后一个填充行,并将其用于“填充”中的B列。我用Right $代替了Mid。您也可以使用Mid $(。Range(“ A1”)。Value,11,2)。公式步骤是不必要的,可以删除。

将工作表名称更改为适当的工作表名称。

Sub TEST()
    With ThisWorkbook.Worksheets("Sheet2")
        .Range("B3").Formula = "=RIGHT(A1,2)"
        .Range("B3").Value = .Range("B3").Value
        If .Cells(.Rows.Count, "A").End(xlUp).Row > 3 Then
            .Range("B4:B" & .Cells(.Rows.Count, "A").End(xlUp).Row) = .Range("B3")
        End If
    End With
End Sub

根据我的喜好,您可以简化为:

Option Explicit
Public Sub TEST()
    With ThisWorkbook.Worksheets("Sheet2")
        If .Cells(.Rows.Count, "A").End(xlUp).Row >= 3 Then
            .Range("B3:B" & .Cells(.Rows.Count, "A").End(xlUp).Row) = Right$(.Range("A1"), 2)
        End If
    End With
End Sub

答案 1 :(得分:1)

对QHarr解决方案的一个小修正:

粘贴值时,您应该强制执行worksheet.calculate或使用VBA公式。否则,如果使用手动重新计算设置,您将得到空白。例如

Sub Coppy_down()
With Sheet1
.Range("B3", .Range("B" & .Cells(Rows.Count, "A").End(xlUp).Row)).Value = Mid(.Range("A1").Value, 11, 2)
End With
End Sub