我对较大的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,所以它需要灵活一些。
谢谢
答案 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