宏将值从第一个单元格粘贴到下面的所有空白单元格,直到行结束

时间:2016-11-16 11:24:39

标签: excel-vba vba excel

从coumn1过滤3个标准, 过滤对应于第1列结果的空白单元格, 我正在尝试应用TODAY公式并仅在选定的空白中粘贴为值 但它在全范围(k7:k818)的应用帮助我从中恢复。

Range("K5").Select
        Selection.AutoFilter
        Range("K5").Select
        ActiveSheet.Range("$A$5:$N$819").AutoFilter Field:=10, Criteria1:=Array( "DANGER", "END", "STOCKOUT"), Operator:=xlFilterValues 
        ActiveSheet.Range("$A$5:$N$819").AutoFilter Field:=11, Criteria1:="=END", _
            Operator:=xlOr, Criteria2:="=" 
        Range("K6").Select
        ActiveCell.FormulaR1C1 = "=TODAY()"  (formula is "=TODAY")
        Range("K6").Select
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
        Selection.Copy
        Range("K7").Select
        Range(Selection, Selection.End(xlDown)).Select_

        Range("K7:K818").Select   
       Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False

1 个答案:

答案 0 :(得分:0)

我认为这就是你要找的东西。在使用与自动过滤器(=Today())相同的范围进行过滤后,它将K5:K819置于所有可见单元格中,然后使用值替换公式。

在我看来,您的代码的其余部分是不必要的,您应该能够使用以下内容。

ActiveSheet.Range("$A$5:$N$819").AutoFilter Field:=10, Criteria1:=Array("DANGER", "END", "STOCKOUT"), Operator:=xlFilterValues
ActiveSheet.Range("$A$5:$N$819").AutoFilter Field:=11, Criteria1:="=END", Operator:=xlOr, Criteria2:="="
Range("K5:K819").SpecialCells(xlCellTypeVisible).Formula = "=Today()"
Range("K5:K819").SpecialCells(xlCellTypeVisible).Value = Range("K5:K819").SpecialCells(xlCellTypeVisible).Value

如果你有一个你知道通过执行以下操作的列总是有一个值,那么这个动态也很容易......

Dim LastRow As Long

LastRow = Cells(Rows.Count, "J").End(xlUp).Row

ActiveSheet.Range("$A$5:$N" & LastRow).AutoFilter Field:=10, Criteria1:=Array("DANGER", "END", "STOCKOUT"), Operator:=xlFilterValues
ActiveSheet.Range("$A$5:$N" & LastRow).AutoFilter Field:=11, Criteria1:="=END", Operator:=xlOr, Criteria2:="="
Range("K5:K" & LastRow).SpecialCells(xlCellTypeVisible).Formula = "=Today()"
Range("K5:K" & LastRow).SpecialCells(xlCellTypeVisible).Value = Range("K6:K" & LastRow).SpecialCells(xlCellTypeVisible).Value

ActiveSheet.Range("$A$5:$N" & LastRow).AutoFilter

上面的代码找到了包含数据的最后一行(在这种情况下是搜索列J),然后使用它来过滤数据,然后我添加了一些代码来删除过滤器。最后一行搜索必须在您确定将始终拥有数据的列上完成。如果不正确,请更改J所需列中的LastRow = Cells(Rows.Count, "J").End(xlUp).Row