繁体   English   中英

Excel Macro复制粘贴条件

[英]Excel Macro copy paste with conditions

我在excel中有一个宏,它可以正常工作,但不是我想要的完美。找不到解决方案,需要您的想法。

它的作用是:从设置复制粘贴值到计算表中的第一个非空单元格。

这是我的代码:

Sub support()
Sheets("Settings").Select
Range("S411:S421").Select
Selection..Copy
Sheets("Calculation").Select
Range("C4").Select
Range("C4").End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
End Sub

但是我只想将非空单元格和不为0的值复制到这10行之间的计算页面。 (所以我应该跳过复制0和空单元格的操作)您可以指导我的任何简单技巧?

是否要每次从Range("S411:S421")复制到Range("C4")..-> 还是可以更改这些范围?

尝试:

    Public Sub CommandButton1_Click()
j = 4
For i = 411 To 421

If ThisWorkbook.Sheets("Settings").Cells(i, 19) <> 0 And ThisWorkbook.Sheets("Settings").Cells(i, 19) <> "" Then
ThisWorkbook.Sheets("Settings").Cells(i, 19).Copy

ThisWorkbook.Sheets("Calculation").Cells(j, 3).PasteSpecial (xlPasteValues)
j = j + 1
End If


Next i
End Sub

你可以使用AutoFilter()

Sub support()
    With Sheets("Settings").Range("S410:S421") '<--| reference wanted range and the cell above it as the "header"
        If IsEmpty(.Cells(1, 1)) Then .Cells(1, 1).Value = "dummyheader" '<--| add a "dummy" header value if it's empty
        .AutoFilter Field:=1, Criteria1:="<>", Operator:=xlAnd, Criteria2:="<>0" '<--| filter referenced range with "not empty" and "not zero" values
        If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then
            .Resize(.Rows.Count - 1, 1).Offset(1).SpecialCells(xlCellTypeVisible).Copy
            Sheets("Calculation").Range("C4").End(xlDown).Offset(1, 0).PasteSpecial xlPasteValues
            Application.CutCopyMode = False
        End If
        If .Cells(1, 1).Value = "dummyheader" Then .Cells(1, 1).ClearContents '<--| remove "dummy" header, if there
        .Parent.AutoFilterMode = False
    End With
End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM