【问题标题】:Copy and paste data by date - excel vba按日期复制和粘贴数据 - excel vba
【发布时间】:2019-01-18 15:10:52
【问题描述】:

我需要在标准日期之前将数据从一张表移动到另一张表,但我使用 IF 所做的选择只选择了与该标准匹配的最后一个单元格。

这是我目前得到的:

Sub Copiar()

Dim range1 As Range

Set range1 = Range("k56:k58")

For Each cell In range1
   If cell.Value = Range("R55").Value Then
      cell.Offset(0, 2).Select
      Selection.Copy
      Sheets("Plan2").Activate
      Range("r56").Select
      ActiveSheet.Paste
   End If
Next

End Sub

【问题讨论】:

  • (1) 您需要阅读如何避免 Select stackoverflow.com/questions/10714251/… (2) 您需要阅读有关添加工作表引用的内容 (3) 您正在粘贴到同一个单元格 R56,每个时间。

标签: excel vba


【解决方案1】:

您正在找到它们,问题是每个答案都会覆盖另一张纸上的 R56。以下代码在每次循环重复时都会推进目标单元格 - 并且还避免了选择和激活您正在使用的每个工作表和单元格的不良做法:

Sub Copiar()  
Dim range1 As Range, destin as Range  
Set range1 = Range("k56:k58")
Set destin= Sheets("Plan2").Range("r56")  
For Each cell In range1
   If cell.Value = Range("R55").Value Then
      cell.Offset(0, 2).copy destin
      set destin=destin.offset(1,0)    ' Crucial bit here
   End If
Next  
End Sub

【讨论】:

    【解决方案2】:

    我假设您不想在每次找到值时都覆盖Sheets("Plan2").Range("r56")。 如果是这种情况,此代码会将找到的值写入在第一张纸上找到的同一行。

    这无需复制粘贴和选择或激活单元格/工作表即可工作。 此外,如果您像我一样使用源数据指定工作表,那么从哪个工作表启动宏甚至都没有关系。

    Sub Copiar()
    
    Dim range1 As Range
    Set range1 = Sheets(1).Range("K56:K58")
    
    For Each cell In range1
       If cell.Value = Sheets(1).Range("R55").Value Then
            Sheets("Plan2").Range("R" & cell.Row).Value = cell.Offset(0, 2).Value
       End If
    Next
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多