String VBA大于功能不工作

String VBA大于功能不工作,string,vba,if-statement,numeric,String,Vba,If Statement,Numeric,我有一个问题,我试图比较的值可以是字母数字,只有数字,或只有字母 该代码最初可以很好地比较同一个100s组中的任何内容(即1-99和字母组件)。然而,当我将100+加入其中时,它出现了故障 代码的当前部分如下所示: For j = 1 To thislength If lennew < j Then enteredval = Left("100A", lennew)

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

该代码最初可以很好地比较同一个100s组中的任何内容(即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
j=1至该长度的

如果lennew=j然后
enteredval=左侧(“100A”,j)
如果结束
如果lenold=j然后
cellval=左(“67”,j)
如果结束
"问题就在这里
如果enteredval>=cellval,则
newrow=newrow+1
如果结束
下一个j
问题出现在最后一个
if
语句中。 当自行车通过100比67大,但仍然跳过。我试图将它们都声明为字符串(在代码的这一部分之上),看看这是否有帮助,但没有

我试图完成的是对一堆行进行排序,并找到它应该去哪里。即100A应介于100和100B之间


抱歉
lennew=len(“100A”)
lennold=len(“67”)
。和
thislength=4
或两个长度中较大的值。

问题在于,您试图通过攻击特定值来解决比较问题,这将是一个需要维护的问题。通过创建一个函数,提供两个返回值——如果第一个操作数在第二个操作数之前,则返回1;如果它们相同,则返回0;如果第一个操作数在第二个操作数之后,则根据您的规则返回1

然后,您可以重新构造代码,以消除特定的硬编码前缀测试,然后直接调用比较函数,例如(这是完全未经测试的、即兴的,而且我的VBA非常陈旧:),但想法是:(它还假设存在一个名为StripPrefix的简单字符串函数,该函数只需提取一个字符串并去掉任何前导数字,我想您自己也可以很容易地旋转)


你想对数字部分进行数字排序,但如果它们相等,请按字母顺序对余额进行排序,对吗?是的。除非有更好的方法。我基本上只希望它显示为.69,69A,69B,70A,99A,100100a。(或数字和字母的任何变化)。我遇到的问题是,69在开始的一小段中看起来比100大,但由于它确实更大,代码无法识别它。在对数字类型使用权益比较之前,需要将数字部分转换为数字类型。请参见文档中的。如果值是字符串,则可以执行Val()这将只比较前导数字部分,例如“1000A”和“1000B”两者都返回1000。问题是你的代码针对的是非常特定的字符串前缀,为了真正解决这个问题,你必须更一般地解决比较问题…非常好。谢谢你的帮助。我有一些想法,我会测试一下,如果行得通,我会给你回复。也就是说,我会检查值。如果值只有这样,我才能通过排序过程来查看哪个值更大。
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