2013-01-16 121 views
1

enter image description here我有問題,當我想A1 = 1.3 B1 = 3和a2 = 1.3 B2 = 2之間上的excel文本和Excel的數字格式

例如= IF(A1> A2比較,「是「,IF(a1 = a2,IF(b1> b2,」是「,」否「),」否「))

第一次沒關係,但後來我改變了值從b1 = 1它變成了」no 「然後我改回了B1 = 3它仍然是‘不’

我認爲它在細胞上的格式關心

的另一個問題是,如果我使用像1.3.1 COM削減至1.3.1.2它沒有任何問題

但是當我使用只有1.3(一個小數點),它送花兒給人有問題

很難解釋,你應該嘗試XX和XXX

之間的比較

此外,如果你有一個很好的另一個VBA代碼比較版本號

謝謝你告訴我我想學習一下吧

它像1個小數點Excel中看到的號碼,但許多小數點Excel中看到的文字

如何解決這個(我必須嘗試改變爲文本格式,但它的工作1次更改值在單元格是回去錯誤之後)。

到我的英語由於較差。使其更清晰"How do i make x.x see as text so that i can compare with x.x.x :) "

+0

您是否嘗試過通過加強評價,看看哪些公式的一部分,你期望不評價? – davids

+0

這個問題沒有意義。 'x.x.x'永遠不可能是一個數字,因此不能作爲一個比較。如果您需要比較它們,則需要將其作爲文本進行處理;如果你需要一個精確的匹配,你需要使用與較短字符相同字符數的較長字符串的子字符串,並將它們進行比較。 –

+0

是xxx如果您仔細閱讀,請參閱文本,但xx請參閱 因此,無論如何,爲了使Excel始終能夠將xx視爲文本 – eathapeking

回答

2

這是您可能想要檢查的文章/文章。第一印象我對你的問題是,你可能會試圖做一個版本號比較。長度和文本點分隔符的數量可能現在重要greatly.for請這個,

http://www.dbforums.com/microsoft-excel/1670840-compare-version-numbers-return-highest-value.html

否則您可以嘗試log還有:

= A1 * 10 ^(4- INT(LOG(A1)))

或者做尾隨.點的替換,肯定第二個文本變成十進制:

如1.3.4將是1.34和1.3.4.1.3將是1.3413

1.2.5.6將是125.6和1.2.4.6.1將124.61

PS:不是機器的前面。將爲您提供另一種代碼,我用點分隔符基於分裂和比較。

編輯與功能:這將比較兩個版本號與任意數量的點分,把它當作一個字符串/文本。但是在1.3.1和1.21.1的情況下,這需要爲1.21.1次數最多的。

Option Explicit 

Function versionNumberComparison(ByRef rng1 As Range, ByRef rng2 As Range) As String 
    Dim i As Integer 
    Dim arrVersion1 As Variant, arrVersion2 As Variant 
    Dim strVer1 As String, strVer2 As String 
    Dim bool2 As Boolean, bool1 As Boolean 
    Dim x As Long, y As Long 

    Application.EnableEvents = False 
    If Not IsEmpty(rng1.Value) Then 
     strVer1 = rng1.Value 
     arrVersion1 = Split(rng1.Value, ".") 
    Else 
     versionNumberComparison = "Version number empty" 
     GoTo Zoo 
    End If 
    If Not IsEmpty(rng2.Value) Then 
     strVer2 = rng2.Value 
     arrVersion2 = Split(rng2.Value, ".") 
    Else 
     versionNumberComparison = "Version number empty" 
     GoTo Zoo 
    End If 

    If UBound(arrVersion1) > UBound(arrVersion2) Then 
     x = UBound(arrVersion1) 
     y = UBound(arrVersion2) 
    ElseIf UBound(arrVersion1) < UBound(arrVersion2) Then 
     x = UBound(arrVersion2) 
     y = UBound(arrVersion1) 
    Else 
     x = UBound(arrVersion1) 
     y = x 
    End If 

    i = 0 
     While i <= y 
      If IsNumeric(arrVersion1(i)) And IsNumeric(arrVersion2(i)) Then 
        If CInt(Trim(arrVersion1(i))) = CInt(Trim(arrVersion2(i))) Then 
         If i = y Then 
          If x <> y Then 
           If Len(strVer1) > Len(strVer2) Then 
            bool1 = True 
            bool2 = False 
            GoTo PrintOut 
           Else 
            bool2 = True 
            bool1 = False 
            GoTo PrintOut 
           End If 
          End If 
         End If 
          bool1 = False 
          bool2 = False 
        ElseIf CInt(Trim(arrVersion1(i))) > CInt(Trim(arrVersion2(i))) Then 
         bool1 = True 
         bool2 = False 
         GoTo PrintOut 
        Else 
         bool2 = True 
         bool1 = False 
         GoTo PrintOut 
        End If 
      Else 
       versionNumberComparison = "Enter Valid version numbers" 
       GoTo Zoo 
      End If 
      i = i + 1 
     Wend 

PrintOut: 

    If bool1 Then 
     versionNumberComparison = strVer1 
    ElseIf bool2 Then 
     versionNumberComparison = strVer2 
    Else 
     versionNumberComparison = "Both the same" 
    End If 

Zoo: 
Application.EnableEvents = True 
End Function 

輸出:

enter image description here

+0

@ethapicking檢查一下,讓我們知道你的想法:如果你有任何疑問。 – bonCodigo

+0

謝謝你,我現在閱讀它〜:D – eathapeking

+0

我已經嘗試改變了。點之前它有一個巨大的bug, excel如果數字是1.31.1和1.3.11它不能區分這 – eathapeking