excel - Excel VBA:用范围交换列
问题描述
我在将 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
但它只能交换两列的第 1 行...
解决方案
使用数组会比循环快得多。在此示例中,列 A 被复制到一个数组Hold_RNG
中。然后将 B 列复制到 A 列,然后将 Array 复制到 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
更新:我并不是要选择竞争的答案,因为它简单有效,但我们的两个答案很好地说明了为什么使用数组一次影响电子表格,比循环和编辑更有效。我构建了这段代码,它将对电子表格的每种方法(插入 E 列)的结果进行计时。通过一轮 2563 行,得分是 0 秒到 4。数组在 0 秒内继续输出,而循环方法在进行 9 次试验时下降到 41 秒。
计时码可以在我的PasteBin 页面上找到(我不希望这个答案看起来长得可笑)
推荐阅读
- flutter - Flutter - 使用国际翻译对 Cubit/ Bloc 内的消息进行应用本地化
- wolfram-mathematica - 如何从文件中导入数据作为 Mathematica 中的列表
- cordova - Cordova iOS 应用程序在应用程序关闭后擦除 indexedDB 数据
- php - 从 WooCommerce 管理员优惠券列表中删除列
- python - 如何在多次点击 python/django 时只刷新 1 次
- docker - 解决“docker build”不访问 package.json 的错误
- vue.js - vue test util:el-select(元素ui)中的触发更改不起作用
- flutter - Flutter - 带有图像的 TabBar
- c# - ZKTeco 推送 SDK
- excel - VBA:使用 VBA 的 Excel 自动化