我有一个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
答案 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())。公式中单元格的参考位置更改为相应的新位置,因此不会更改公式的输出。
您可能会遇到问题,因为您删除了值,这可能会删除引用。