Страницы: 1
RSS
Преобразование текста в число в макросе, вне зависимости от настроек разделителей
 
Всем добрый день! Подскажите, пжста, как преобразовать в VBA текст в число, чтобы вне зависимости от разделителей, у пользователей точно получилось число. Обрабатываемые значения имеют вид - 54 174,00. У меня разделители для числа такие - 54174.00.  У других пользователей. 54174,00.   Как обойти этот момент? Чтобы точно у всех работало. Спасибо.
 
Цитата
matr0001 написал:
как преобразовать в VBA текст в число
Код
Val()
Согласие есть продукт при полном непротивлении сторон
 
Пробовала. Он выдает только символы до пробела. То есть в данном случае - 54.
 
Код
Sub StrToNum()
    With Selection
        .Replace " ", "", 2
        .Replace ".", ".", 2
        .Replace Chr(160), "", 2
    End With
End Sub
Я сам - дурнее всякого примера! ...
 
Удаляйте пробелы, приводите разделители целой и дробной части к одному виду.
 
Упс! ))
 
Цитата
kuklp написал:
Код ? 1234567Sub StrToNum()    With Selection        .Replace " ", "", 2        .Replace ".", ".", 2        .Replace Chr(160), "", 2    End WithEnd Sub
Спасибо! В принципе получилось. Но вот только все равно приходится заменять разделитель дробной части запятую на точку. У меня проходит. А вот если у другого пользователя будет наоборот, то у него не пройдет, видимо...
 
Подскажите, как именно обрабатываете? В цикле? Если да - то можно сделать функцию, которая будет каждое число преобразовывать в нужный формат в соответствии с локализацией.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist написал:
Подскажите, как именно обрабатываете? В цикле? Если да - то можно сделать функцию, которая будет каждое число преобразовывать в нужный формат в соответствии с локализацией.
Нет, сделала просто замену всего диапазона

       Range("A1:A1000").Formula = "=DATE(RIGHT(B1,4),RIGHT(LEFT(B1,5),2),LEFT(B1,2))"
       Range("M1:M1000").Select
       With Selection
           .Replace " ", "", 2
           .Replace ",", ".", 2
           .Replace Chr(160), "", 2
       End With
       Range("P1:P1000").Select
       With Selection
           .Replace " ", "", 2
           .Replace ",", ".", 2
           .Replace Chr(160), "", 2
       End With

Но могу и в цикл вставить (он тоже есть), если есть вариант эффективнее:)
 
matr0001, оформляйте код тегами, кнопка <...> не панели редактирования сообщений. Ну и:
Код
Range("A1:A1000").Formula = "=DATE(RIGHT(B1,4),RIGHT(LEFT(B1,5),2),LEFT(B1,2))"
 with Range("M1:M1000,P1:P1000")
 .Replace " ", "", 2
 .Replace ",", ".", 2
 .Replace Chr(160), "", 2
 End With
Я сам - дурнее всякого примера! ...
 
Для пущей универсальности (дабы не заменять разделители):
Код
AppSep = Application.DecimalSeparator: RepSep = IIf(AppSep = ".", ",", ".")
With Range("M1:M1000,P1:P1000")
 .Replace " ", "", 2
 .Replace Chr(160), "", 2
 .Replace RepSep, AppSep, 2
 End With
 
Цитата
Влад написал:
.Replace RepSep, AppSep, 2
не надо! В ВБА ВСЕГДА разделитель - точка. Так что независимо от системного разделителя менять надо на точку.
Я сам - дурнее всякого примера! ...
 
Всем большое спасибо!
Страницы: 1
Читают тему
Наверх