如何复制单元格&将其粘贴到Excel VBA宏中的多个单元格

时间:2017-11-27 17:04:47

标签: excel vba excel-vba excel-formula

我想复制金额并将其粘贴到金额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

此代码仅适用于此表。如果内容发生变化则无效。例如:如果添加更多项目,则会提供不同的输出。

任何人都可以帮我解决它。提前谢谢。

1 个答案:

答案 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)如果是,则从源中的同一行复制。