2018年10月28日日曜日

テキストの数字の最大値を取得

数値データの最大値を取得することはよくあり、Application.WorksheetFunction.max() を使えば良いですが、コード番号などで数値がテキストとして使われることがあります("001"といったものです)
下の表(ソースは「なんちゃって個人情報」)では誕生日がテキストの数字となっています。
この最大値を取得しようとしてワークシート関数のMax()を使うと、0が返ってくるという残念な結果に、、
なので、テキストとして入力されている数字の最大値を取得する関数です。

関数サンプル

    Sub 誕生日の最大値を取得()
        Dim max誕生日 As Variant
        On Error GoTo AbEnd
        max誕生日 = MaxInNumericString(Range("D2:D101"))
        MsgBox max誕生日
        Exit Sub
    AbEnd:
        MsgBox Err.Description
    End Sub
'========================================================================='
    Function MaxInNumericString( _
        ByVal pRange As Range _
    ) As Variant
''  文字列として扱われている数値データの中で最大の値を取得する
'========================================================================='
        Dim arrData     As Variant
        Dim i           As Integer
        Dim j           As Integer
        Dim MaxString   As Variant
        Dim MaxValue    As Single
        Dim Buff        As Variant
        ''初期化
        MaxInNumericString = False
        ''Rangeを2次元の配列に代入
        arrData = pRange
        ''最大値を取得
        For i = LBound(arrData, 1) To UBound(arrData, 1)
            For j = LBound(arrData, 2) To UBound(arrData, 2)
                Buff = arrData(i, j).value
                ''数字データ以外の場合は抜ける
                If IsNumeric(Buff) = False Then
                    Err.Raise _
                        800, _
                        "MaxInNumericString", _
                        "データに数字以外の文字列が含まれています"
                    Exit Function
                End If
                If i = 1 And j = 1 Then
                    MaxString = Buff
                    MaxValue = CSng(Buff)
                ElseIf MaxValue < CSng(Buff) Then
                    MaxString = Buff
                    MaxValue = CSng(Buff)
                End If
            Next j
        Next i
        
        MaxInNumericString = MaxString
    
    End Function

0 件のコメント:

コメントを投稿