Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Произвести замену в строке по определенным условиям - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Произвести замену в строке по определенным условиям
Chikitonik Дата: Пятница, 25.08.2017, 14:58 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день!
Прошу помочь в следующем вопросе.
Есть строка в текстовом формате с текстом вида
Код
50+845-2,5%-70

Как можно преобразовать строку, чтобы
Код
-2,5%
изменилось на
Код
*0,975

? Перед числом с процентом может быть как + так и -, само число может быть как целое, так и дробное. При поиске на форуме встречались функции uuu, которые делают схожие действия, но моих знаний не хватает для того, чтобы переделать под свои нужды.

К сообщению приложен файл: 4093555.xlsx (8.2 Kb)


Сообщение отредактировал Chikitonik - Пятница, 25.08.2017, 15:18
 
Ответить
СообщениеДобрый день!
Прошу помочь в следующем вопросе.
Есть строка в текстовом формате с текстом вида
Код
50+845-2,5%-70

Как можно преобразовать строку, чтобы
Код
-2,5%
изменилось на
Код
*0,975

? Перед числом с процентом может быть как + так и -, само число может быть как целое, так и дробное. При поиске на форуме встречались функции uuu, которые делают схожие действия, но моих знаний не хватает для того, чтобы переделать под свои нужды.


Автор - Chikitonik
Дата добавления - 25.08.2017 в 14:58
Kuzmich Дата: Пятница, 25.08.2017, 15:38 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 717
Репутация: 159 ±
Замечаний: 0% ±

Excel 2003
Цитата
встречались функции uuu, которые делают схожие действия

Попробуйте так
[vba]
Код

Function uuu$(t$)
With CreateObject("VBScript.RegExp"): .Global = True: .ignorecase = True
.Pattern = "[+-]\d{1,2},?\d?%"
uuu = .Replace(t, "*0,975")
End With
End Function
[/vba]


Сообщение отредактировал Kuzmich - Пятница, 25.08.2017, 15:39
 
Ответить
Сообщение
Цитата
встречались функции uuu, которые делают схожие действия

Попробуйте так
[vba]
Код

Function uuu$(t$)
With CreateObject("VBScript.RegExp"): .Global = True: .ignorecase = True
.Pattern = "[+-]\d{1,2},?\d?%"
uuu = .Replace(t, "*0,975")
End With
End Function
[/vba]

Автор - Kuzmich
Дата добавления - 25.08.2017 в 15:38
Chikitonik Дата: Пятница, 25.08.2017, 15:59 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо!
Теперь понятно как найти число возле % со знаком + или -
Но в формуле у Вас оно жестко заменятся на 0,975.
А необходимо заменить на:
если +x%, то на *(x/100+1)
если -x%, то на *-(x/100-1)
где x число перед процентом. Подскажете?


Сообщение отредактировал Chikitonik - Пятница, 25.08.2017, 16:17
 
Ответить
СообщениеСпасибо!
Теперь понятно как найти число возле % со знаком + или -
Но в формуле у Вас оно жестко заменятся на 0,975.
А необходимо заменить на:
если +x%, то на *(x/100+1)
если -x%, то на *-(x/100-1)
где x число перед процентом. Подскажете?

Автор - Chikitonik
Дата добавления - 25.08.2017 в 15:59
AndreTM Дата: Пятница, 25.08.2017, 16:21 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Так?
[vba]
Код
Function uuu$(ByVal t$)
    With CreateObject("VBScript.RegExp"): .Global = True: .ignorecase = True
        .Pattern = "([+-]\d{1,2},?\d?)%"
        Set objMatches = .Execute(t)
        For i = 0 To objMatches.Count - 1
            Set objMatch = objMatches.Item(i)
            t = Replace(t, objMatch.Value, "*" & CStr(1 + CDbl(objMatch.SubMatches(0)) / 100))
        Next
        uuu = t
    End With
End Function
[/vba]


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеТак?
[vba]
Код
Function uuu$(ByVal t$)
    With CreateObject("VBScript.RegExp"): .Global = True: .ignorecase = True
        .Pattern = "([+-]\d{1,2},?\d?)%"
        Set objMatches = .Execute(t)
        For i = 0 To objMatches.Count - 1
            Set objMatch = objMatches.Item(i)
            t = Replace(t, objMatch.Value, "*" & CStr(1 + CDbl(objMatch.SubMatches(0)) / 100))
        Next
        uuu = t
    End With
End Function
[/vba]

Автор - AndreTM
Дата добавления - 25.08.2017 в 16:21
Kuzmich Дата: Пятница, 25.08.2017, 16:27 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 717
Репутация: 159 ±
Замечаний: 0% ±

Excel 2003
[vba]
Код

Function uuu$(t$)
With CreateObject("VBScript.RegExp"): .Global = True: .ignorecase = True
  .Pattern = "\+(\d{1,2},?\d?)%"
  If .test(t) Then
    uuu = .Replace(t, "*($1/100+1)")
  End If
  .Pattern = "-(\d{1,2},?\d?)%"
  If .test(t) Then
    uuu = .Replace(t, "*-($1/100-1)")
  End If
End With
End Function

[/vba]


Сообщение отредактировал Kuzmich - Пятница, 25.08.2017, 16:39
 
Ответить
Сообщение[vba]
Код

Function uuu$(t$)
With CreateObject("VBScript.RegExp"): .Global = True: .ignorecase = True
  .Pattern = "\+(\d{1,2},?\d?)%"
  If .test(t) Then
    uuu = .Replace(t, "*($1/100+1)")
  End If
  .Pattern = "-(\d{1,2},?\d?)%"
  If .test(t) Then
    uuu = .Replace(t, "*-($1/100-1)")
  End If
End With
End Function

[/vba]

Автор - Kuzmich
Дата добавления - 25.08.2017 в 16:27
Chikitonik Дата: Пятница, 25.08.2017, 16:30 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Так?

Круто! Все работает! Спасибо за помощь!
 
Ответить
Сообщение
Так?

Круто! Все работает! Спасибо за помощь!

Автор - Chikitonik
Дата добавления - 25.08.2017 в 16:30
Chikitonik Дата: Пятница, 25.08.2017, 16:40 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Kuzmich, ваш код значительно проще для моего понимания, и с -x% он работает как надо, но с +x% почему-то не работает. Притом, что если закомментировать строки где обрабатывается значение с -x%, то работает)))
 
Ответить
СообщениеKuzmich, ваш код значительно проще для моего понимания, и с -x% он работает как надо, но с +x% почему-то не работает. Притом, что если закомментировать строки где обрабатывается значение с -x%, то работает)))

Автор - Chikitonik
Дата добавления - 25.08.2017 в 16:40
Kuzmich Дата: Пятница, 25.08.2017, 16:41 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 717
Репутация: 159 ±
Замечаний: 0% ±

Excel 2003
Цитата
но с +x% почему-то не работает.

Исправил код в предыдущем сообщении
 
Ответить
Сообщение
Цитата
но с +x% почему-то не работает.

Исправил код в предыдущем сообщении

Автор - Kuzmich
Дата добавления - 25.08.2017 в 16:41
RAN Дата: Пятница, 25.08.2017, 16:46 | Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Function Мяв$(s$)
    With CreateObject("VBScript.RegExp"): .Global = True: .ignorecase = True
        .Pattern = "([+-]\d{1,2},?\d?)%"
        If .test(s) Then
            Мяв = .Replace(s, "*" & 1 + CDbl(.Execute(s)(0).SubMatches(0)) / 100)
        End If
    End With
End Function
[/vba]
[offtop][p.s.]Тёзка, одной ложкой хлебали? :D [/p.s.][/offtop]


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Пятница, 25.08.2017, 16:49
 
Ответить
Сообщение[vba]
Код
Function Мяв$(s$)
    With CreateObject("VBScript.RegExp"): .Global = True: .ignorecase = True
        .Pattern = "([+-]\d{1,2},?\d?)%"
        If .test(s) Then
            Мяв = .Replace(s, "*" & 1 + CDbl(.Execute(s)(0).SubMatches(0)) / 100)
        End If
    End With
End Function
[/vba]
[offtop][p.s.]Тёзка, одной ложкой хлебали? :D [/p.s.][/offtop]

Автор - RAN
Дата добавления - 25.08.2017 в 16:46
Chikitonik Дата: Пятница, 25.08.2017, 16:55 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Большое всем спасибо за отзывчивость! Очень помогли как с конкретной задачей, так и для понимания процесса.
 
Ответить
СообщениеБольшое всем спасибо за отзывчивость! Очень помогли как с конкретной задачей, так и для понимания процесса.

Автор - Chikitonik
Дата добавления - 25.08.2017 в 16:55
AndreTM Дата: Пятница, 25.08.2017, 20:28 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Андрей, никак не одной ложкой :D

Твой код найдет все вхождения по паттерну - но заменит-то на что?
Да-да - на преобразованное значение из первого вхождения... а ведь значения могут быть разными:
Строка: 10+10+1%-100-2%
Мяв: 10+10*1,01-100*1,01
uuu: 10+10*1,01-100*0,98


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Пятница, 25.08.2017, 20:29
 
Ответить
СообщениеАндрей, никак не одной ложкой :D

Твой код найдет все вхождения по паттерну - но заменит-то на что?
Да-да - на преобразованное значение из первого вхождения... а ведь значения могут быть разными:
Строка: 10+10+1%-100-2%
Мяв: 10+10*1,01-100*1,01
uuu: 10+10*1,01-100*0,98

Автор - AndreTM
Дата добавления - 25.08.2017 в 20:28
Chikitonik Дата: Вторник, 05.09.2017, 19:52 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Подскажите, еще, пожалуйста, такой момент.. У меня есть две функции, хочу объединить их в одну, но не получается. При вычислении пишет ошибку всегда. как только не пробовал.

[vba]
Код
Public Function fnEvaluate( _
  ByRef rng As Range)
    'производит математическое вычисление
    'ее необходимо объединить с uuu
    fnEvaluate = Application.Evaluate(Replace(rng.Value, ",", "."))
End Function

Function uuu$(t$)
    
    'преобразует строку где есть процент
    'если +x%, то на *(x/100+1)
    'если -x%, то на *-(x/100-1)
    'где x число перед процентом.
    With CreateObject("VBScript.RegExp"): .Global = True: .ignorecase = True
        .Pattern = "([+-]\d{1,2},?\d?)%"
        Set objMatches = .Execute(t)
        For i = 0 To objMatches.Count - 1
            Set objMatch = objMatches.Item(i)
            t = Replace(t, objMatch.Value, "*" & CStr(1 + CDbl(objMatch.SubMatches(0)) / 100))
        Next
        uuu = t
    End With
       
    'убирает все русские буквы из текста
        With CreateObject("VBScript.RegExp"): .Global = True: .ignorecase = True
        .Pattern = "[А-ЯЁ]+"
        uuu = .Replace(t, "")
    End With
    
End Function
[/vba]
 
Ответить
СообщениеПодскажите, еще, пожалуйста, такой момент.. У меня есть две функции, хочу объединить их в одну, но не получается. При вычислении пишет ошибку всегда. как только не пробовал.

[vba]
Код
Public Function fnEvaluate( _
  ByRef rng As Range)
    'производит математическое вычисление
    'ее необходимо объединить с uuu
    fnEvaluate = Application.Evaluate(Replace(rng.Value, ",", "."))
End Function

Function uuu$(t$)
    
    'преобразует строку где есть процент
    'если +x%, то на *(x/100+1)
    'если -x%, то на *-(x/100-1)
    'где x число перед процентом.
    With CreateObject("VBScript.RegExp"): .Global = True: .ignorecase = True
        .Pattern = "([+-]\d{1,2},?\d?)%"
        Set objMatches = .Execute(t)
        For i = 0 To objMatches.Count - 1
            Set objMatch = objMatches.Item(i)
            t = Replace(t, objMatch.Value, "*" & CStr(1 + CDbl(objMatch.SubMatches(0)) / 100))
        Next
        uuu = t
    End With
       
    'убирает все русские буквы из текста
        With CreateObject("VBScript.RegExp"): .Global = True: .ignorecase = True
        .Pattern = "[А-ЯЁ]+"
        uuu = .Replace(t, "")
    End With
    
End Function
[/vba]

Автор - Chikitonik
Дата добавления - 05.09.2017 в 19:52
_Boroda_ Дата: Вторник, 05.09.2017, 20:12 | Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Первую функцию вообще уберите, а последней строкой второй функции (между End With и End Function)
[vba]
Код
uuu = Application.Evaluate(Replace(uuu, ",", "."))
[/vba]
К сообщению приложен файл: 4093555_1.xlsm (14.1 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПервую функцию вообще уберите, а последней строкой второй функции (между End With и End Function)
[vba]
Код
uuu = Application.Evaluate(Replace(uuu, ",", "."))
[/vba]

Автор - _Boroda_
Дата добавления - 05.09.2017 в 20:12
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2026 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!