VBA如果陈述压缩

时间:2015-11-11 14:50:45

标签: vba excel-vba if-statement excel

Excel 2015,Access 2015

一般国家:

if s=t then
    LD = 0
    Exit Function
end if

现状:

If s = t Then: LD = 0: Exit Function

目标: 有没有办法将多个条件语句压缩成一行而不会基本上伪造一个回报?我正在寻找更优雅的解决方案。

灵感:来自https://en.wikipedia.org/wiki/Levenshtein_distance的C代码

for (int j = 0; j < t.Length; j++)
{
    var cost = (s[i] == t[j]) ? 0 : 1;
    v1[j + 1] = Minimum(v1[j] + 1, v0[j + 1] + 1, v0[j] + cost);
}

在VBA中改为:

For j = 0 To Len(t) - 1
    If Mid$(s, i + 1, 1) = Mid$(t, j + 1, 1) Then cost = 0 Else cost = 1
    v1(j + 1) = VBAMin(v1(j) + 1, v0(j + 1) + 1, v0(j) + cost)
Next j

2 个答案:

答案 0 :(得分:1)

我有时会做类似下面的事情:

(我知道大多数人会认为这是糟糕的编程)

If s = t _
      Then LD = 0:Exit Function _
      Else If a=b _
                Then LD = 1 _
                Else If c=d then LD = 2 Else LD = 3:Exit Function

答案 1 :(得分:1)

试试这个

 cost = IIf(Mid$(s, I + 1, 1) = Mid$(t, J + 1, 1), 0, 1)