2017-02-15 31 views
0

我有一个问题,我试图比较可能是字母数字,仅数字或仅字母的值。VBA大于函数不起作用

该代码原本适用于比较同一个100s组(IE 1-99与字母组件)中的任何内容。但是,当我包含100多个,它发生故障。

代码的当前部分内容:在过去if语句时发生

  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 

问题。 当通过100的循环大于67时,仍然跳过。我试图将它们都声明为字符串(在这部分代码的上面),看看它是否会有所帮助,但不会。

我想完成的是排序通过一堆行,找到它应该去的地方。 IE 100A应该在100到100B之间。

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

+0

你想要的数字部分数字进行排序,但如果这些都是平等的,按字母顺序排序的平衡,正确吗? –

+0

是的。除非有更好的方法去做。我基本上只是希望它显示为。 69,69A,69B,70A,99A,100,100A。 (或任何数字和字母的变体)。我遇到的问题是,69号出现的第一点点大于100,但不知何故代码现在无法识别它,它确实较大。 –

+1

在使用公式比较之前,您需要将数字部分转换为数字类型。请参阅文档中的[比较运算符](http://stackoverflow.com/documentation/vba/5813/operators/20479/comparison-operators#t=201702151525369696781)。 – Comintern

回答

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