对于VBA中的循环行为不端,而不是按照我想要的方式运行

时间:2012-12-28 17:54:36

标签: excel vba

我在这里做的是将存储为文本的字符串转换为整数。不幸的是,只是将格式从一般格式更改为数字格式并不能解决问题,而我之前所做的就是手动查找/替换每个单独的数字(即使用excel查找替换为0,1,2,3等)

我对下面代码的问题是它只会替换一些数字,但不是全部。我甚至无法弄清楚它所做的设定模式。据我所知,for语句应该为每个“数字”值从0到9运行吗?那么为什么不替换所有字符串呢?

Dim Digit As Integer
Dim ReplacementRange As Range

Set ReplacementRange = Range("Table1[AR]")`

Digit = 0


For Digit = 0 To Digit = 9

    ReplacementRange.Replace What:=Digit, Replacement:=Digit, LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False         
    Digit = Digit + 1

Next

1 个答案:

答案 0 :(得分:7)

要将存储为某个范围内的文字的数字快速转换为其数字值,您只需将这些值放入范围内即可:

ReplacementRange.value = ReplacementRange.value


编辑:我有时间,所以我想我会添加你所做的错误,除了它是一个简单的解决方案的复杂替代品:

for循环结构错误。正确的最小语法为[variable] = [startValue] to [endValue],例如:For x = 0 to 1

For Digit = 0 To Digit = 9最终被评估为等同于For Digit = 0 to 0(因为您之前将Digit设置为0.这意味着循环仅运行Digit = 0的值。您也在递增循环中的数字,通过增加步数可以更合理地处理。在这种情况下,你想要击中每一个数字,所以你不应该增加数值。

要修复循环,您需要执行以下操作:

For Digit = 0 To 9
    ReplacementRange.Replace What:=Digit, Replacement:=Digit, LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False         
Next

但是......仍然无法解决以文本形式存储的数字问题。