VBA大于功能不起作用

时间:2017-02-15 14:21:03

标签: string vba if-statement numeric

我有一个问题,我试图比较可以是字母数字,仅数字或仅字母的值。

该代码最初适用于比较同一100s组内的任何内容(IE 1-99与字母组件)。然而,当我将100+加入其中时,它发生故障。

代码的当前部分是:

            For j = 1 To thislength
                If lennew < j Then
                    enteredval = Left("100A", lennew)
                ElseIf lennew >= j Then
                    enteredval = Left("100A", j)
                End If
                If lenold < j Then
                    cellval = Left("67", lenold)
                ElseIf lenold >= j Then
                    cellval = Left("67", j)
                End If 
                'issue occurs here
                If enteredval >= cellval Then
                    newrow = newrow+1
                End If
            Next j

问题出现在上一个if语句中。 当通过100的循环大于67但仍然跳过。我试图将它们都声明为字符串(在代码的这一部分之上),看看它是否会有所帮助,但事实并非如此。

我想要完成的是对一堆行进行排序并找到它应该去的地方。 IE 100A应该在100到100B之间。

抱歉lennew=len("100A")lennold=len("67")thislength=4或两个长度中较大的一个。

1 个答案:

答案 0 :(得分:0)

问题是你试图通过攻击特定值来解决比较问题,这将是一个需要维护的问题。我通过创建一个函数来使问题更通用,如果第一个操作数在第二个操作数“之前”,则提供两个值返回-1,如果第二个操作数相同则返回0,如果第一个操作数是“第二个操作数”,则返回1按照你的规则。

然后,您可以重新构建代码以消除特定的硬编码前缀测试,然后直接调用比较函数,例如(这是完全未经测试的,袖手旁观,我的VBA是VERRRRRY过时:)但是这个想法在那里:(它还假设存在一个名为StripPrefix的简单字符串函数,只需要一个字符串并剥离任何前导数字,我怀疑你可以自己很容易地旋转)

Function CompareCell(Cell1 as String, Cell2 as String) as Integer

    Dim result as integer
    Dim suffix1 as string
    Dim suffix2 as string 

    if val(cell1)< val(cell2) Then
       result = -1
    else if val(cell1)>val(cell2) then
       result = 1
    else if val(cell1)=val(cell2) then
       if len(cell1)=len(cell2) then
          result =0
       else
         ' write code to strip leading numeric prefixes
         ' You must supply StripPrefix, but it's pretty simple
         ' I just omitted it here for clarity
         suffix1=StripPrefix(cell1) ' eg returns "ABC" for "1000ABC"
         suffix2=StripPrefix(cell2)
         if suffix1 < suffix2 then
            result = -1
         else if suffix1 > suffix2 then
            result = 1
         else
            result = 0
         end if
   end if

   return result

end function

这样的函数允许你接受任何两个单元格引用并直接比较它们以做出你需要的任何决定:

if CompareCell(enteredval,newval)>=0 then
   newrow=newrow+1
end if