숫자 소수점 자리수 동적 반환 - Heeyoung-Ahn/Excel_VBA GitHub Wiki

call adjust_decimal(txtbox_name, Round(raw_number, decimal_position)) '10자리 까지 가능
Private Sub adjust_decimal(argTB As MSForms.TextBox, argValue As Double)
    Dim noA As Integer '전체 글자수
    Dim noB As Integer '마지막 '0'값의 위치
    Dim noC As Integer '소수점 자리수
    
    noA = Len(Format(argValue, "@")) '숫자의 경우 len함수가 안먹어서 문자형으로 변환하여 연산
    noB = InStrRev(argValue, "0")
    If InStr(argValue, ".") = 0 Then
        noC = 0
        argTB.Value = Format(argValue, "#,##0")
    Else
        noC = noA - InStr(argValue, ".")
        Do While noA = noB
            argValue = Left(argValue, noB - 1)
            
            noA = Len(Format(argValue, "@"))
            noB = InStrRev(argValue, "0")
        Loop
        noC = noA - InStr(argValue, ".")
        Select Case noC
            Case 10
                argTB.Value = Format(argValue, "#,##0.0000000000")
            Case 9
                argTB.Value = Format(argValue, "#,##0.000000000")
            Case 8
                argTB.Value = Format(argValue, "#,##0.00000000")
            Case 7
                argTB.Value = Format(argValue, "#,##0.0000000")
            Case 6
                argTB.Value = Format(argValue, "#,##0.000000")
            Case 5
                argTB.Value = Format(argValue, "#,##0.00000")
            Case 4
                argTB.Value = Format(argValue, "#,##0.0000")
            Case 3
                argTB.Value = Format(argValue, "#,##0.000")
            Case 2
                argTB.Value = Format(argValue, "#,##0.00")
            Case 1
                argTB.Value = Format(argValue, "#,##0.0")
            Case 0
                argTB.Value = Format(argValue, "#,##0")
        End Select
    End If
End Sub