VBA使用公式交换行范围忽略单元格

时间:2018-07-09 13:15:00

标签: excel-vba vba excel

我有一个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

1 个答案:

答案 0 :(得分:0)

如果您只是想交换他们的位置,请仅使用#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())。公式中单元格的参考位置更改为相应的新位置,因此不会更改公式的输出。

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