excel - 如何自动过滤然后仅复制和粘贴可见单元格
问题描述
我试图通过使用以下代码将形状分配给宏来基本上用名为“运算符”的工作表中的“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中 的单元格中结果应该如下:
解决方案
这里不需要过滤;您可以只使用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
当存在多个区域时,尝试进行价值转移将无法正常工作。
推荐阅读
- android - 如何向片段中的工具栏添加功能
- c++ - 默认构造函数不能被引用错误(Visual Studios 2019)
- python - 为什么在尝试使用 Line3D 对象时 matplotlib 3d 动画不起作用
- python - 在 Python 中安装 matplotlib 的问题
- python - 在 Linux 上的 Jupyter Notebook 中出现错误,但在 Windows 上没有
- javascript - Javascript,要固定一位小数,除非它是 0
- postgresql - Cloud SQL Postgres 标志:cloudsql.iam_authentication?
- asp.net - 没有 Roslyn 你能有多行字符串吗?
- javascript - 这些在 React 中使用三元运算符有条件地应用内联样式的方式在性能上是否有任何差异?
- oracle - 在授予 CONNECT 权限后在 ORACLE 18c ORA-04045 中创建用户错误