1

ここに画像の説明を入力してください

たとえば、Excelでa1 = 1.3 b1=3とa2=1.3 b2=2を比較したい場合は疑問があります。 =IF(a1>a2,"Yes",IF(a1=a2,IF(b1>b2,"Yes","No"),"no"))

最初は問題ありませんが、値をb1 = 1から「no」に変更してから、b1=3に戻しました。まだ「no」です。

セル内のフォーマットに関係していると思います。

もう1つの懸念は、1.3.1.2と比較して1.3.1のように使用しても問題はありませんが、1.3(小数点以下1桁)のみを使用すると常に問題が発生することです。

バージョン番号を比較するための優れた別のVBAコードがある場合も、xxとxxxを比較する必要があることを説明するのは難しいです。

小数点以下1桁は数値として表示されますが、多くの小数点はテキストとして表示されます

これを修正するにはどうすればよいですか(テキスト形式に変更しようとしましたが、セルの値を変更すると1回機能し、エラーに戻ります)。

私の英語のせいで貧弱です。明確にするために "How do i make x.x see as text so that i can compare with x.x.x :) "

4

1 に答える 1

2

こちらがチェックしたい記事/投稿です。私があなたの質問に対して持っていた第一印象は、あなたがバージョン番号の比較をしようとしているかもしれないということです。テキスト内のドット区切り文字の長さと数が非常に重要になる可能性があります。今のところ、これを確認してください。

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

出力:

ここに画像の説明を入力してください

于 2013-01-16T03:39:16.420 に答える