こちらがチェックしたい記事/投稿です。私があなたの質問に対して持っていた第一印象は、あなたがバージョン番号の比較をしようとしているかもしれないということです。テキスト内のドット区切り文字の長さと数が非常に重要になる可能性があります。今のところ、これを確認してください。
http://www.dbforums.com/microsoft-excel/1670840-compare-version-numbers-return-highest-value.html
または、次のことも試してみてくださいlog
。
= A1 * 10 ^(4-INT(LOG(A1)))
または、末尾.
のドットを置き換えて、2番目のテキストが小数になることを確認してください。
たとえば、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:マシンの正面ではありません。ドット区切り文字による分割と比較に基づいた別のコードを提供します。
関数で編集:これにより、2つのバージョン番号が任意の数のドットポイントと比較され、文字列/テキストとして扱われます。ただし、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
出力: