【问题标题】:Excel VBA Logical operator Not wildcard*Excel VBA 逻辑运算符 非通配符*
【发布时间】:2016-05-25 15:32:34
【问题描述】:

我在 Excel 运算符上苦苦挣扎我花了很长时间搜索我觉得我很接近我正在尝试编写这个 If 语句如果值不以 722* 开头并且不等于 PI 然后执行紧接着else下面的代码执行else语句下的代码。

If Not CStr(Cells(r, cC)) = "722*" And Not CStr(Cells(r, cS)) = "PI" Then

【问题讨论】:

  • 使用leftIf Not left(CStr(Cells(r, cC),3) = "722"
  • *方式更通用,对以后的学习有帮助
  • 通用性并不总是很好,通配符的计算量比Left要重得多如果你不需要兰博基尼,那就不要使用它。
  • 您的要求表明does not begin 所以left 是正确的工具。学习的一部分是知道使用哪个工具〜_^如果需要通配符,也许可以考虑instr
  • @user3598756 一个只有“722”的字符串确实以“722”开头,您的解决方案会忽略它

标签: vba excel


【解决方案1】:

最简单的方法是使用Left

If Not Left(CStr(Cells(r, cC),3) = "722"

如果要使用通配符,请使用Like

If Not Cells(r, cC)) Like "722*" Then

将它们与= 进行比较会将* 简单地视为一个字符。

Edit2:显然我对 Like 的计算工作量有误。 Like 似乎是更快的方法(在这种情况下),特别是如果没有匹配(我猜是惰性评估)。显然,这两种情况下的总 CPU 和内存使用量都非常小,您可以根据自己的喜好选择哪一种。

这是我发现的: s Like "722*"Left(s,3) = "722"

s Like "*722"Right(s,3) = "722"

s Like "*722*"Instr(1,s,"722")>0

差异的大小取决于字符串长度以及是否匹配(例如,如果s 不以7LeftRight 开头,则s Like "722*" 非常快如果您将“722”替换为更长的内容,则不会像Like 那样受苦)

【讨论】:

  • 我只想指出,like 运算符的计算量要比简单的 =left 重得多。
  • @litelite 是的,添加了它。
  • @litelite,您从哪里得到like 运算符的计算量比左运算符重得多的想法?你有一些事实支持吗?
  • @FlorentB。我最初没有将它包含在我的帖子中,因为我从未做过研究,但相信其他人在这里发布。我认为 Left 可能是最有效的,因为复制字符串的前 n 个字符应该很快。问题是 Like 是否有开销是因为它为更复杂的任务做准备?
  • @FlorentB。我刚试了一下,Like 方法的速度是 Left 的 4 倍。也许分配新的字符串然后比较它而不是仅仅比较它会有所不同?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 2021-11-02
  • 2011-12-30
相关资源
最近更新 更多