Добрый вечер дамы и господа. В Excel есть возможность форматировать ячейки с числом для для комфортного восприятия тысяч, десяти тысяч и т.д. Но стоит в такую ячейку добавить текст, как все прекрасы сводятся на нет. Пример во вложении. Нужно в число 11111111,1 1. Добавить копейки т.е. ноль или два нуля, если б не было запятой (добавить запятую 11111111,10). 2. Перед третьей цифрой до запятой добавить пробел, если число больше чем трёхзначное. (1 111,10 или 11 111,10 или 111 111,10) 3. Перед шестой цифрой до запятой поставить пробел, если число больше чем шестизначное. (1 111 111,10 или 11 111 111,10 или 111 111 111,10) 4. Ну и перед девятой. 5. И самое сложное - все эти пробелы нужны в текстовом формате. С данным числом не будут производится в дальнейшем никакие арифметические действия, данное число будет носит информативный характер.
Почему в VBA? - Мне всё это в коде нужно для макроса.
Спасибо.
Добрый вечер дамы и господа. В Excel есть возможность форматировать ячейки с числом для для комфортного восприятия тысяч, десяти тысяч и т.д. Но стоит в такую ячейку добавить текст, как все прекрасы сводятся на нет. Пример во вложении. Нужно в число 11111111,1 1. Добавить копейки т.е. ноль или два нуля, если б не было запятой (добавить запятую 11111111,10). 2. Перед третьей цифрой до запятой добавить пробел, если число больше чем трёхзначное. (1 111,10 или 11 111,10 или 111 111,10) 3. Перед шестой цифрой до запятой поставить пробел, если число больше чем шестизначное. (1 111 111,10 или 11 111 111,10 или 111 111 111,10) 4. Ну и перед девятой. 5. И самое сложное - все эти пробелы нужны в текстовом формате. С данным числом не будут производится в дальнейшем никакие арифметические действия, данное число будет носит информативный характер.
Почему в VBA? - Мне всё это в коде нужно для макроса.
Public Function formatNum(rng As Range) As String Dim str1 As String, str2$ Dim i As Integer, start% If rng.Count > 1 Then Exit Function If Not IsNumeric(rng.Value) Then formatNum = "Not Numeric": Exit Function str1 = CStr(rng.Value) str2 = "," i = InStr(str1, str2) If i = 0 Then str2 = ",00" ElseIf Len(str1) - i = 1 Then str2 = Right(str1, 2) & "0" str1 = Left(str1, i - 1) Else str2 = Right(str1, 3) str1 = Left(str1, i - 1) End If start = Len(str1) - 2 If Len(str1) < 4 Then start = 1 Do While start > -3 If start > 1 Then str2 = " " & Mid(str1, start, 3) & str2 Else If (Len(str1) Mod 3) = 0 Then i = 3 Else i = Len(str1) Mod 3 End If str2 = " " & Mid(str1, 1, i) & str2 End If start = start - 3 Loop formatNum = LTrim(str2) End Function
[/vba]
Хы, а я чет на UDF-ку размахнулся [vba]
Код
Public Function formatNum(rng As Range) As String Dim str1 As String, str2$ Dim i As Integer, start% If rng.Count > 1 Then Exit Function If Not IsNumeric(rng.Value) Then formatNum = "Not Numeric": Exit Function str1 = CStr(rng.Value) str2 = "," i = InStr(str1, str2) If i = 0 Then str2 = ",00" ElseIf Len(str1) - i = 1 Then str2 = Right(str1, 2) & "0" str1 = Left(str1, i - 1) Else str2 = Right(str1, 3) str1 = Left(str1, i - 1) End If start = Len(str1) - 2 If Len(str1) < 4 Then start = 1 Do While start > -3 If start > 1 Then str2 = " " & Mid(str1, start, 3) & str2 Else If (Len(str1) Mod 3) = 0 Then i = 3 Else i = Len(str1) Mod 3 End If str2 = " " & Mid(str1, 1, i) & str2 End If start = start - 3 Loop formatNum = LTrim(str2) End Function