2017-02-15 32 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