首页 > 解决方案 > VBA用公式交换行范围忽略单元格

问题描述

我有一个 vba 代码来交换两个行范围(不包括 A 列),但需要它忽略包含公式的单元格(在本例中为 K&L 列)。我在下面的代码可以正常工作,但是会弄乱 K&L 列中的公式!谁能建议如何最好地克服这个问题?

Sub swap()
    If Selection.Areas.Count <> 2 Then Exit Sub

    Set range1 = Selection.Areas(1)
    Set range2 = Selection.Areas(2)


    Set range1 = range1.Resize(, 100)
    Set range2 = range2.Resize(, 100)

     If range1.Rows.Count <> range2.Rows.Count Or _
        range1.Columns.Count <> range2.Columns.Count Then Exit Sub

    range1Address = range1.Address
    range1.Cut
    range2.Insert shift:=xlShiftToRight
    Range(range1Address).Delete shift:=xlToLeft

    range2Address = range2.Address
    range2.Cut
    Range(range1Address).Insert shift:=xlShiftToRight
    Range(range2Address).Delete shift:=xlToLeft

End Sub

标签: excelvba

解决方案


如果您只是想交换他们的位置,请仅使用列 #s 使其更容易一些:

Dim col1 As Long, col2 As Long
If Selection.Areas.Count <> 2 Then Exit Sub
col1 = Selection.Areas(1).Column
col2 = Selection.Areas(2).Column
If Left(Cells(2, col1), 1) = "=" Or Left(Cells(2, col2), 1) = "=" Then Exit Sub 'Should catch if it's a formula
Columns(col1).Cut
Columns(col2).Insert shift:=xlShiftToRight
Columns(col2).Cut
Columns(col1).Insert shift:=xlShiftToRight

将公式放入一些正在移动的单元格中后,我没有任何问题(简单地将范围内的所有单元格相加,1 乘 1,而不是 sum())。公式中单元格的参考位置更改为相应的新位置,因此不会更改公式的输出。

您可能会遇到问题,因为您删除了值,这可能会删除引用。


推荐阅读