VBA 大于函数不工作

VBA Greater Than Function Not Working

我在尝试比较可以是字母数字、仅数字或仅字母的值时遇到问题。

代码最初可以很好地比较同一 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 但仍然跳过时。我试图将它们都声明为字符串(在这部分代码之上)以查看是否有帮助,但没有。

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

对不起 lennew=len("100A")lennold=len("67")。并且 thislength=4 或两个长度中较大的一个。

问题是您正试图通过攻击特定值来解决比较问题,这将是一个需要维护的问题。我会通过创建一个提供两个值的函数来使问题更通用根据您的规则是 "after" 第二个。

然后您可以重组您的代码以消除特定的硬编码前缀测试,然后直接调用比较函数,例如(这是完全未经测试的,off-the-cuff,我的 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