숫자 소수점 자리수 동적 반환 - 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