【发布时间】:2020-11-13 16:30:23
【问题描述】:
我需要将“文本数字”转换为数字。文本编号如下所示:32,23B 或 242,23M。
我需要删除字母并乘以 1,000 ; 1,000,000;等等,取决于字母。
下面的代码有效,但由于我需要转换 10M 行,所以需要很长时间。
有什么巧妙的办法吗?
For shIndex = startSheet To lastSheet
LastRowF = Sheets(shIndex).Range("F" & Rows.Count).End(xlUp).Row
For i = 3 To LastRowF
Mul = Right(Sheets(shIndex).Range("F" & i), 1)
Select Case Mul
Case "K"
Multiplier = 1
Case "M"
Multiplier = 1000
Case "B"
Multiplier = 1000000
Case "T"
Multiplier = 1000000000
Case Else
Multiplier = False
End Select
If Multiplier Then
With Sheets(shIndex)
.Range("F" & i) = CSng(Left(Sheets(shIndex).Range("F" & i), Len(Sheets(shIndex).Range("F" & i)) - 1) * Multiplier)
.Range("F" & i).NumberFormat = "#,##0"
End With
End If
Next i
Next shIndex
【问题讨论】:
-
您是否关闭了屏幕更新和计算功能?如果从他的结果输出中计算出任何可能会挂起宏的东西
-
将数据加载到
Variant数组中并在内存中进行转换,然后写回工作表。 -
@BigBen 哦,不,我忘了怎么做。希望看到你解决这个问题,这样我才能记住;)
-
@urdearboy - cpearson.com/excel/ArraysAndRanges.aspx
-
为什么不直接使用内置的“搜索和替换”功能,我认为这里不需要 VBA
标签: excel vba data-conversion