我有疑问,当我想在excel上比较a1 = 1.3 b1 = 3和a2 = 1.3 b2 = 2时
例如= IF(a1> a2,"是",IF(a1 = a2,IF(b1> b2,"是","否" )"无&#34))
第一次没关系,但后来我改变了b1 = 1的值,改为" no"然后我把它改回b1 = 3它仍然没有"没有"
我认为它关注单元格中的格式
另一个问题是如果我使用1.3.1与1.3.1.2比较它没有任何问题
但是当我只使用1.3(一个小数点)时,它总是有问题
很难解释你应该尝试在x.x和x.x.x之间进行比较
如果你有另一个好的VBA代码来比较版本号
谢谢,请告诉我,我想研究一下它像1小数点excel看作数字,但许多小数点excel看作文本
我该如何解决这个问题(我已尝试更改为文本格式,但是在更改单元格中的值后它会工作一次,然后返回错误。)
由于我的英语很差。使其更清晰"How do i make x.x see as text so that i can compare with x.x.x :) "
答案 0 :(得分:2)
以下是您可能要查看的文章/帖子。我对您的问题的第一印象是您可能正在尝试进行版本号比较。文本中点分隔符的长度和数量可能非常重要。现在请检查一下,
http://www.dbforums.com/microsoft-excel/1670840-compare-version-numbers-return-highest-value.html
否则您也可以尝试log
:
= A1 * 10 ^(4-INT(LOG(A1)))
或者在尾随.
点上进行替换,当然第二个文本会变成小数:
E.g。 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
输出: