我正在尝试通过分配形状来在名为“操作员”的工作表中使用列“ AN” 中的值基本上填充列“ AM” 中的任何空白单元格具有以下代码的宏。 请注意,An中的单元格中有一个方程式,因此我只想复制这些值。
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”方法仅显示可见的单元格(因此在自动过滤之后,它将为我显示空白),但是我不确定如何将其包含在我的代码中! 以下屏幕快照是工作表最初的外观:(在本示例中, AN3 和 AN5 的单元格值将粘贴到 AM3 和 AM5 :
我的代码为所有空白单元格自动过滤“ AN” 列,然后尝试复制 AN 中的单元格并将可见的单元格值粘贴到 AM < / strong> 结果应为以下内容:
答案 0 :(得分:2)
无需在此处过滤;您可以只使用SpecialCells(xlCellTypeBlanks)
,然后对结果使用Offset
来引用相同的行,但要在“ AN”列中。
Sub PendingChanges()
On Error Resume Next
Dim blankCells as Range
Set blankCells = Worksheets("Operator").Range("AM1:AM10").SpecialCells(xlCellTypeBlanks)
On Error GoTo 0
If Not blankCells Is Nothing Then
Dim rng as Range
For Each rng in blankCells.Areas
rng.Value = rng.Offset(,1).Value
Next
End If
End Sub
一些注意事项:
On Error Resume Next
和On Error GoTo 0
,因为如果没有空格,则SpecialCells(xlCellTypeBlanks)
调用将失败。它们会暂时禁用然后重新启用错误处理。Areas
是不连续范围内的每个不同区域。例如,如果blankCells
指向AM2
和AM4:AM5
,则AM2
是第一个区域,AM4:AM5
是第二个区域。.Value = .Value
不会正确进行。答案 1 :(得分: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]