Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何自动筛选然后仅复制和粘贴可见单元格_Excel_Vba_Autofilter - Fatal编程技术网

Excel 如何自动筛选然后仅复制和粘贴可见单元格

Excel 如何自动筛选然后仅复制和粘贴可见单元格,excel,vba,autofilter,Excel,Vba,Autofilter,我试图用名为“操作符”的工作表中的“AN”列中的值填充“am”列中的任何空白单元格,方法是使用以下代码为宏指定形状请注意中的单元格中有一个等式,因此我只想复制值 Sub PendingChanges() Range("AM1:AM10").CurrentRegion.AutoFilter Field:=1, Criteria1:="=" Worksheets("Operator").Range("AM1:AM10").SpecialCells(xlCellTypeVisibl

我试图用名为“操作符”的工作表中的“AN”列中的值填充“am”列中的任何空白单元格,方法是使用以下代码为宏指定形状请注意中的单元格中有一个等式,因此我只想复制值

Sub PendingChanges()

Range("AM1:AM10").CurrentRegion.AutoFilter Field:=1, Criteria1:="="

        Worksheets("Operator").Range("AM1:AM10").SpecialCells(xlCellTypeVisible).Value = Worksheets("Operator").Range("AN1:AN10").Value

    Selection.AutoFilter Field:=1

End Sub
我知道有一种“SpecialCells”方法只显示可见的单元格(所以在自动过滤后,它会为我显示空白),但我不知道如何将其包含到我的代码中! 以下屏幕截图是工作表最初的外观:(在本例中,AN3AN5的单元格值将分别粘贴到AM3AM5中:

“我的代码”自动筛选列“AN”中的任何空白单元格,然后尝试复制AN中的单元格,并将可见单元格值粘贴到AM中的单元格中 结果应如下所示:


此处无需过滤;您只需使用
特殊单元格(xlCellTypeBlanks)
,然后在结果上使用
偏移量
,以引用相同的行,但在列“AN”中

一些注意事项:

  • 由于
    特殊单元格(xlCellTypeBlanks)
    调用将在没有空格的情况下失败,因此需要“错误恢复下一步”和“错误转到0时”。它们临时禁用并重新启用错误处理
  • 是非连续范围内的每个不同区域。例如,如果
    blankCells
    指的是
    AM2
    AM4:AM5
    ,则
    AM2
    是第一个区域,
    AM4:AM5
    是第二个区域
  • 您需要遍历这些区域,因为当存在多个区域时,尝试值传输
    .value=.value
    无法正常工作

    • 您不需要制作过滤器,然后填充下一列的空白 您可以尝试下面的代码,它可以直接解决您的问题

      [VBA]
      Sub test()
      Dim rBlanks As Range
      
      Set rBlanks = Nothing
      With ThisWorkbook.Sheets("Operator")
      On Error Resume Next
      Set rBlanks = Intersect(.Range("AM:AM"), .UsedRange).SpecialCells(xlCellTypeBlanks)
      On Error GoTo 0
      
      If Not rBlanks Is Nothing Then
      rBlanks.FormulaR1C1 = "=RC[1]"
      Intersect(.Range("AM:AM"), .UsedRange).Copy
      .Range("AM1").PasteSpecial (xlPasteValues)
      Application.CutCopyMode = False
      End If
      End With
      
      End Sub
      [/VBA]
      

      你使用公式是什么意思?我在`Set blankCells=Worksheets(“运算符”).Range(“AM1:AM10”).SpecialCells((xlCellTypeBlanks)`中遇到语法错误,我删除了它。编辑,出于某种原因,它只复制了第一个值(AN2单元格值为5)在AOK的所有空白单元格中,请参阅编辑,很抱歉。当有多个区域时,使用值传输不起作用。当然,我将添加一些细节。它从“AM6、AM8和AM10:AM121”复制“0”。
      [VBA]
      Sub test()
      Dim rBlanks As Range
      
      Set rBlanks = Nothing
      With ThisWorkbook.Sheets("Operator")
      On Error Resume Next
      Set rBlanks = Intersect(.Range("AM:AM"), .UsedRange).SpecialCells(xlCellTypeBlanks)
      On Error GoTo 0
      
      If Not rBlanks Is Nothing Then
      rBlanks.FormulaR1C1 = "=RC[1]"
      Intersect(.Range("AM:AM"), .UsedRange).Copy
      .Range("AM1").PasteSpecial (xlPasteValues)
      Application.CutCopyMode = False
      End If
      End With
      
      End Sub
      [/VBA]