4

我一直在网上搜索,试图弄清楚评估的用途。我从 msdn 得到的是:“返回应用于列表中的对象的表达式。” 我不知道这意味着什么。

我问的原因是因为我得到了一段代码,我试图从中找出一些逻辑意义。为什么这样写?使用评估而不是更传统的方法有什么优势?一长串嵌套函数的正确语法是什么?

这是我的代码示例:

With Range("B1", Cells(Rows.Count, "B").End(xlUp))
        .Value = Evaluate("Index(If(Left(Trim(" & .Address & "),1)=""."",Replace(Trim(" & .Address & "),1,1,""""),Trim(" & .Address & ")),)")
End With

有人可以帮我分解一下并理解它吗?它应该删除前导句点并消除 b 列中所有单元格中的多余空格。我的问题是它只有在我运行两次时才有效。如果我能对此有所了解,那么我可以操纵它以使其正常运行。

为了获得额外的荣誉,如果我想通过相同的范围并删除所有破折号(“-”),我将如何构建这样的语句?

我真的很想学习。任何帮助表示赞赏。

4

1 回答 1

3

好的,这里是:

Evaluate告诉应用程序在此上下文中评估函数。

该函数是一个字符串连接,"Index(If(Left(...其中包含一些动态组件 ( .Address),因为它被应用于整个范围:

Range("B1", Cells(Rows.Count, "B").End(xlUp))

这实际上是为该范围内的每个单元格计算公式,但只将公式的计算值写入每个单元格。

等效的方法是用公式填充范围,然后对范围执行复制 + 特殊粘贴(仅限值)。这在内存和耗时过程方面显然更昂贵,尤其是对于更大范围的对象。

我个人不赞成这种方法,但这主要是我个人喜好的问题。

这种情况下的优点是它填充了整个单元格范围——在一个语句中可以是 10 个单元格或 10,000 个单元格或 1,048,576 个单元格(在 Excel 2007+ 中)。

替代方法是做一个For/Next循环(这在内存方面很昂贵,因此在大范围内速度很慢),即使你正在对内存中的数组进行循环并将结果数组写入工作表,我认为有使用像这段代码这样的单个语句是一种优雅。

于 2013-09-05T01:33:44.140 回答