我想复制金额并将其粘贴到金额as shown in the picture以上的所有空单元格中,使用MS Excel中的VBA或宏
编辑: 这就是我做的。
Sub Macro2()
Range("F5").Select
Selection.Copy
Range("F2:F4").Select
ActiveSheet.Paste
Range("F7").Select
Application.CutCopyMode = False
Selection.Copy
Range("F6").Select
ActiveSheet.Paste
Range("F12").Select
Application.CutCopyMode = False
Selection.Copy
Range("F8:F11").Select
ActiveSheet.Paste
End Sub
此代码仅适用于此表。如果内容发生变化则无效。例如:如果添加更多项目,则会提供不同的输出。
任何人都可以帮我解决它。提前谢谢。
答案 0 :(得分:-1)
就复制价值的逻辑而言,我认为这是你需要解决的问题。但我确实有一些如何到达那里的提示。
不使用选择/复制/粘贴 - 使用直接分配
Range("G5").Resize(3, 1).Value = Range("F5").Value
这将获取单元格F5
中的一个值,并使用它来分配三个单元格G5:G7
。
要选择表格中的特定值,请使用.Cells()
函数
For i=1 to 10
Range("B2").Cells(i,1).Value = Range("A2").Cells(i,1).Value
Next i
要计算向下的行数,或者在具有值的列中使用以下函数(放置在模块中)。
Public Function CountCols(ByVal r As Range) As Long
If IsEmpty(r) Then
CountCols = 0
ElseIf IsEmpty(r.Offset(0, 1)) Then
CountCols = 1
Else
CountCols = r.Worksheet.Range(r, r.End(xlToRight)).Columns.Count
End If
End Function
Public Function CountRows(ByVal r As Range) As Long
If IsEmpty(r) Then
CountRows = 0
ElseIf IsEmpty(r.Offset(1, 0)) Then
CountRows = 1
Else
CountRows = r.Worksheet.Range(r, r.End(xlDown)).Rows.Count
End If
End Function
用作
Dim n as Long
' Count rows in table starting from A2
n = CountRows(Range("A2"))
Dim r as Range
' Set a range reference to n×1 cells under A2
Set r = Range("A2").Resize(n,1)
要检查某个单元格是否为空,请使用IsEmpty()
,就像我在CountRows()
中使用的一样。
可以你将所有这些碎片拼凑在一起制作一个可以满足您需求的宏吗?您应该:a)检查表中有多少行,b)向下移动单元格并检查它们在目的地是否为空,c)如果是,则从源中的同一行复制。