gpt4 book ai didi

vba - Excel VBA - 寻找简化循环的方法

转载 作者:行者123 更新时间:2023-12-04 22:04:41 25 4
gpt4 key购买 nike

我最近做了一个循环,它在每个单元格中获取字符串,在字符串中搜索一个“_”,如果有一个则切断该位及其后面的任何字符。看着代码,我意识到它可能太复杂了,可以缩短或简化,但我不太确定该怎么做。有没有办法让这段代码更有效率?

Sub Name_Change()

Sheets("Sheet1").Activate

Dim tg_row As Integer
tg_row = 1

For Each nm_cl In Range("Table1[Name]")
If InStr(1, nm_cl, "_", vbTextCompare) = 0 Then
Range("Table1[Name]").Cells(tg_row, 1).Value = nm_cl.Value
Else
Range("Table1[Name]").Cells(tg_row, 1) = _
Left(nm_cl, InStr(1, nm_cl, "_", vbTextCompare) - 1)
End If
tg_row = tg_row + 1
Next nm_cl

End Sub

谢谢您的帮助!

最佳答案

对此进行优化的第一次尝试是注意您正在调用 InStr。多次。您可以通过计算一次并存储结果来加快速度。

除此之外,我会注意到大概 Range("Table1[Name]")只有一列(否则您将用其他列的数据覆盖第一列)。因此,您可以替换 Range("Table1[Name]").Cells(tg_row, 1)nm_cl .在此过程中,我们注意到 nm_cl.Value = nm_cl.Value 的冗余语句可以删除。这导致以下代码:

Sub Name_Change()

Sheets("Sheet1").Activate

Dim index As Long

For Each nm_cl In Range("Table1[Name]")
index = InStr(1, nm_cl, "_", vbTextCompare)
If index <> 0 Then
nm_cl = Left(nm_cl, index - 1)
End If
Next nm_cl

End Sub

如果您需要更高的效率,除此之外,您可以使用以下方法将数据加载到变体中
dim data as Variant
data = Range("Table1[Name]").Value

在 VBA 中处理所有数据,然后使用
Range("Table1[Name]").Value = data

这将提高您的速度,因为在 Excel 和 VBA 之间传输数据很慢,这意味着您将有 1 次读取和 1 次写入,而不是每行 1 次读取和 1 次写入,但它需要(轻微)重写您的算法为使用变体中的数组的语法与使用范围不同。请注意,如果超出 65536 行,这将不起作用。我相信这是 Excel 2003 及更早版本的遗留约束。

关于vba - Excel VBA - 寻找简化循环的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26408659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com