'Функция для вырезания числа из строки...
Public Function ЧислоИЗСтр(Ячейка As Range, Optional Начальная_позиция As Integer = 1, _
Optional Конечная_позиция As Integer = 1000) As Double
Dim i As Integer
Dim exitStr As String
Dim str As String
Dim sep As String
Dim ch As String
Dim flag As Boolean
If Len(Ячейка.value) = 0 Then ЧислоИЗСтр = 0: Exit Function
flag = True
exitStr = ""
sep = Application.International(xlDecimalSeparator)
str = Trim(Ячейка.value)
For i = Начальная_позиция To Конечная_позиция
ch = Mid(str, i, 1)
If Len(exitStr) = 0 And Not IsDigit(ch) Then
Do While Not IsDigit(ch)
i = i + 1
ch = Mid(str, i, 1)
Loop
End If
If Len(exitStr) > 0 And _
Not IsDigit(ch) And Not InStr(1, ",.", ch) > 0 And _
Not (ch = " " Or IsDigit(Mid(str, i + 1, 1))) Then
ЧислоИЗСтр = CDbl(exitStr): Exit Function
End If
Select Case Asc(ch)
Case Asc("0") To Asc("9")
exitStr = exitStr & ch
Case Asc(","), Asc(".")
If IsDigit(Mid(str, i + 1, 1)) And Not (i + 1 > Конечная_позиция) Then
If flag Then exitStr = exitStr & sep: flag = False
End If
Case Else
exitStr = exitStr + ""
End Select
Next i
If Not (Len(exitStr) = 0 Or Trim(exitStr) = sep) Then
ЧислоИЗСтр = CDbl(exitStr)
Else
ЧислоИЗСтр = 0
End If
End Function
'Функция для проверки символа (число/не число)
'Если символ - число, возвращает True, иначе возвращает False
Private Function IsDigit(something As Variant) As Boolean
IsDigit = False
If Asc(something) >= Asc("0") And Asc(something) <= Asc("9") Then IsDigit = True
End Function
Как получить системный разделитель целой и дробной части числа?
...для преобразования строки
...надо получить системный разделитель
...или Ёкселевский(он ведь может и не системный юзать)
Цитата:
Originally posted by XtreamAll
Пишу функцию для ВБА...
...для преобразования строки
...надо получить системный разделитель
...или Ёкселевский(он ведь может и не системный юзать)
Пишу функцию для ВБА...
...для преобразования строки
...надо получить системный разделитель
...или Ёкселевский(он ведь может и не системный юзать)
Application.International(xlDecimalSeparator)
Искать некогда - работы куча!
=ПСТР(ТЕКСТ(3/2;"Основной");2;1)
Цитата:
Originally posted by IKor
А почему-то сразу подумал про
=ПСТР(ТЕКСТ(3/2;"Основной");2;1)
А почему-то сразу подумал про
=ПСТР(ТЕКСТ(3/2;"Основной");2;1)
Остроумно!
Но на англоязычном компе не будет формата Основной. Будет General. Так задача сводится к предыдущей... :(
А свойство .International всё равно рекомендую запомнить - там очень много полезной инфы.
Цитата:
Originally posted by IKor
А почему-то сразу подумал про
=ПСТР(ТЕКСТ(3/2;"Основной");2;1)
А почему-то сразу подумал про
=ПСТР(ТЕКСТ(3/2;"Основной");2;1)
Поиск разделителя - только часть задачи...
...чтобы всю задачу формулами решить, придется много своих писать:D
Цитата:
Originally posted by XtreamAll
Поиск разделителя - только часть задачи...
...чтобы всю задачу формулами решить, придется много своих писать:D
Поиск разделителя - только часть задачи...
...чтобы всю задачу формулами решить, придется много своих писать:D
Если ты строчку в число переводишь, то вот здесьhttp://forum.codenet.ru/showthread.php?s=&threadid=13213 есть функция ВЧис, которая понимает и . и ,
Цитата:
Originally posted by Cutty Sark
Если ты строчку в число переводишь, то вот здесьhttp://forum.codenet.ru/showthread.php?s=&threadid=13213 есть функция ВЧис, которая понимает и . и ,
Если ты строчку в число переводишь, то вот здесьhttp://forum.codenet.ru/showthread.php?s=&threadid=13213 есть функция ВЧис, которая понимает и . и ,
Пасибо, но я уже написал:}
задача была типа этой:
http://forum.codenet.ru/showthread.php?s=&threadid=14359
но не так глобально...
Если кому надо...