Страницы: 1
RSS
Определение валюты с форматированной ячейки
 
Помогите пожалуйста со следующим вопросом, не нашел ответа ни на вашем сайте ни в сети.
Я работаю с прайсами поставщиков товаров. Есть ряд поставщиков которые в столбце с ценой на товар указывают цену в разных валютах. Выводят отображение валюты в виде форматирования ячейки.
Пример:
Столбец B - с ценами
B2 - 1200 руб
B3 - 123 USD
B4 - 12 EUR
...
и т.д.

У меня стоит задача вывести в другой столбец валюту которая стоит в ячейках.
Подскажите как это можно сделать?
Изменено: ygrinko - 22.09.2015 12:06:07
 
http://forum.msexcel.ru/index.php/topic,11120.0.html
Здесь похожее.
Там же и пожелание: число отдельно, валюта отдельно.
 
Если нет никаких "НО", то для ячейки C3 формула будет:
Код
=ПРАВСИМВ(B3;3)
 
Цитата
ygrinko написал:  отображение валюты в виде форматирования ячейки.
берите в строковую переменную из формата ячейки
Код
s$ = [A1].NumberFormat
и примените метод Split по пробелу...
p.s. или показывайте файл (не обязательно оригинал, а суть проблемы)
Изменено: JeyCi - 22.09.2015 12:22:24
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Без файла примера допиливайте под свои форматы сами
Изменено: Сергей - 22.09.2015 12:43:16 (чет глюк)
Лень двигатель прогресса, доказано!!!
 
Выкладываю файл для примера
 
ну пока не ушел
Лень двигатель прогресса, доказано!!!
 
Сергей, Вы волшебник!
Спасибо большое, все работает, другие варианты не помогли.
 
чтоб вам разобраться в волшебстве, уточняю в диспетчере имен именованная макрофункция (которая "ю"), не живет в файлах без поддержки макросов
Лень двигатель прогресса, доказано!!!
 
Сергей, уже понял на оригинальном файле. Сейчас выводит как надо, еще раз спасибо!
 
Цитата
ygrinko написал: другие варианты не помогли.
#4 - UDF - user defined function
Код
Function valuta(cl As Range) As String
Dim s$, a
s$ = cl.NumberFormat
a = Split(s$, " ")
valuta$ = Replace(a(UBound(a)), """", "")
End Function
P.S.
Сергей, спасибо за альтернативу -  Что такое макрофункции
Изменено: JeyCi - 22.09.2015 17:34:01
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Вот такая  UDF получилась
Код
Function GetCurrensy(Rng As Range) As String
    If Rng.Count > 1 Then Exit Function
    With CreateObject("VBScript.RegExp")
    .Pattern = "[\d, ]+"
    If .Test(Rng.Text) Then GetCurrensy = .Replace(Rng.Text, "")
    End With
End Function

UPD и вот для выделения числовой части
Код
Function GetCurrensySumm(Rng As Range) As Double
    If Rng.Count > 1 Then Exit Function
    Dim aStr As String
    aStr = Rng.Text
    With CreateObject("VBScript.RegExp")
        .Pattern = "[\D]+"
        If .Test(aStr) Then aStr = .Replace(aStr, "")
        If aStr = "" Then aStr = "0"
         GetCurrensySumm = aStr
    End With
End Function

Изменено: МВТ - 22.09.2015 18:20:43
 
JeyCi, не обессудьте, но как-то Ваша  UDF выдает немного не то: при вводе в виде 123 USD возвращает General, а при задании валюты (в частности, $) через формат ячейки - [$$-C09]#,##0.00
 
Цитата
МВТ написал: Ваша  UDF выдает немного не то
делала под файл - др варианты не рассматривала... и СМ В ФАЙЛЕ - её использовать с обычными (соответствующими) функциями xl...
p.s. ваши UDF тоже выдают ошибки у меня... 1-я - работает с изменением рег.выражения на "[\d(,|.) ]+" - т.к. у меня точка, как разделитель разрядов... 2-я не знаю, но выдаёт #ЗНАЧ!
Изменено: JeyCi - 22.09.2015 19:03:48
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
JeyCi, насчет точки, спасибо за подсказку - не сообразил. Второй макрос почему-то заработал в таком виде
Код
Function GetCurrensySumm(Rng As Range) As Double
    If Rng.Count > 1 Then Exit Function
    Dim aStr As String
    aStr = Rng.Text
    With CreateObject("VBScript.RegExp")
        .Pattern = "[\d]+(\.|,)?\d{0,}"
        If .Test(aStr) Then aStr = .Execute(aStr)(0)
        If aStr = "" Then aStr = "0"
         GetCurrensySumm = aStr
    End With
End Function

P.S. никоим образом не имел в виду как-то Вас уязвить, просто хотелось сделать максимально универсально
Изменено: МВТ - 22.09.2015 20:08:17
Страницы: 1
Читают тему
Наверх