我在将A列交换到B列,然后将B列交换到A列时遇到问题,两列的行数均为2563。是否有任何VBA代码可以解决此问题?
我已经在尝试这段代码:
Private Sub CommandButton1_Click()
Dim temp As Double
temp = Range("A1").Value
Range("A1").Value = Range("B1").Value
Range("B1").Value = temp
End Sub
但是它只能交换两列的第一行...
答案 0 :(得分:1)
您可以循环交换它们。对于您的情况,循环应进行2563次。
Private Sub CommandButton1_Click()
For i = 1 To 2563
temp = Cells(i, 1).Value
Cells(i, 1).Value = Cells(i, 2).Value
Cells(i, 2).Value = temp
Next i
End Sub
答案 1 :(得分:1)
使用数组比循环快得多。在此示例中,列A被复制到数组Hold_RNG
中。然后将B列复制到A列,然后将数组复制到B列。
Sub SwapCOlumns()
Dim hold_rng() As Variant
Dim rowsToinclude As Long, WS As Worksheet
Set WS = ActiveSheet '<--- make sure this is correct worksheet
rowsToinclude = 2563 '<----- might want to make more dynamic
With WS
hold_rng = .Range("A1:A" & rowsToinclude)
.Range("A1:A" & rowsToinclude).Value = .Range("B1:B" & rowsToinclude).Value
.Range("B1:B" & rowsToinclude).Value = hold_rng
End With
End Sub
更新:我并不是要选择竞争性答案,因为它既简单又有效,但是我们的两个答案很好地说明了为什么要使用数组来影响电子表格一次,比循环和编辑要有效得多。我建立了this code,它将为电子表格的每种方法(插入E列)的时间计时。一轮2563行的得分为0秒到4。该阵列在0秒内继续输出,而在进行9次试验时,循环方法降至41秒。
可以在我的PasteBin page上找到计时代码(我不想这个答案看起来很长)
答案 2 :(得分:1)
我更喜欢使用arrays
,因为速度更快。
Option Explicit
Sub test()
Dim i As Long
Dim arrA As Variant, arrB As Variant
Dim ValueA As Double, ValueB As Double
'Cahng if needed
With ThisWorkbook.Worksheets("Sheet1")
arrA = .Range("A1:A2563")
arrB = .Range("B1:B2563")
For i = 1 To 2563
ValueA = arrA(i, 1)
ValueB = arrB(i, 1)
arrA(i, 1) = ValueB
arrB(i, 1) = ValueA
Next i
.Range("A1").Resize(UBound(arrA), 1) = arrA
.Range("B1").Resize(UBound(arrB), 1) = arrB
End With
End Sub
答案 3 :(得分:0)
只是将其添加到混合中,还有第三种方法。
在B之后插入一列。将A复制到C。删除A。
With ThisWorkbook.Worksheets(1)
.Columns(3).Insert
.Columns(1).Copy .Columns(3)
.Columns(1).Delete
End With
(假设您要移动整列,但通常会这样做。)
但是,其运行速度取决于工作表的大小以及它具有多少个公式。