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

Вход

Регистрация

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

 

= Мир MS Excel/применить фун-цию сумм() к ячейке в которой содержится текст - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
применить фун-цию сумм() к ячейке в которой содержится текст
frukti4ek Дата: Четверг, 20.09.2012, 12:30 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация: 0 ±
Замечаний: 20% ±

возможно ли применить формулу к ячейке в текстовом формате, что бы в ячейке была функция сложения или умножения
К сообщению приложен файл: 14.xls (13.5 Kb)
 
Ответить
Сообщениевозможно ли применить формулу к ячейке в текстовом формате, что бы в ячейке была функция сложения или умножения

Автор - frukti4ek
Дата добавления - 20.09.2012 в 12:30
Serge_007 Дата: Четверг, 20.09.2012, 12:44 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Конкретно для приведённого примера:
Code
=ПСТР(E11;ПОИСК(" грн";E11)-5;5)*ПСТР(E11;ПОИСК(" дней";E11)-3;3)


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеКонкретно для приведённого примера:
Code
=ПСТР(E11;ПОИСК(" грн";E11)-5;5)*ПСТР(E11;ПОИСК(" дней";E11)-3;3)

Автор - Serge_007
Дата добавления - 20.09.2012 в 12:44
frukti4ek Дата: Четверг, 20.09.2012, 12:48 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация: 0 ±
Замечаний: 20% ±

Serge_007, Спасибо большое, подошло....
 
Ответить
СообщениеSerge_007, Спасибо большое, подошло....

Автор - frukti4ek
Дата добавления - 20.09.2012 в 12:48
vikttur Дата: Пятница, 21.09.2012, 11:01 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2941
Репутация: 526 ±
Замечаний: 0% ±

frukti4ek, а если будет "за 5 дней"? А если "300 грн. за 1 день"? А если разные цены в одном тексте? А если...?
 
Ответить
Сообщениеfrukti4ek, а если будет "за 5 дней"? А если "300 грн. за 1 день"? А если разные цены в одном тексте? А если...?

Автор - vikttur
Дата добавления - 21.09.2012 в 11:01
Alex_ST Дата: Пятница, 21.09.2012, 23:20 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
frukti4ek,
ВОЗМОЖНО!
Но с использованием UDF smile
К сообщению приложен файл: 4_frukti4ek.xls (27.0 Kb)



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщениеfrukti4ek,
ВОЗМОЖНО!
Но с использованием UDF smile

Автор - Alex_ST
Дата добавления - 21.09.2012 в 23:20
KuklP Дата: Суббота, 22.09.2012, 10:50 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Леш, для этого у регэксп есть метод тест. Чуть поправил твою ЮДФ:
[vba]
Code
Function ИЗВЛЕЧЬ_ЦЕЛЫЕ(ParamArray Диапазон())
        Dim rArea, rCell, sStr$, i&
        For Each rArea In Диапазон
            For Each rCell In IIf(rArea.Count = 1, Array(rArea.Value), rArea.Value)
                sStr = sStr & " " & rCell
            Next rCell
        Next rArea
        With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = "\b\d+\b" ' чтоб адреса ячеек не считала:-)
            If Not .test(sStr) Then Exit Function
                With .Execute(sStr)
                ReDim Arr(1 To .Count)
                For i = 0 To .Count - 1: Arr(i + 1) = CLng(.Item(i).Value): Next i
                ИЗВЛЕЧЬ_ЦЕЛЫЕ = Arr
            End With: End With
            'Зачем возвращать ошибку? Вернем 0
'    ИЗВЛЕЧЬ_ЦЕЛЫЕ = CVErr(xlErrValue)   ' вернуть ошибку #ЗНАЧЕНИЕ если была ошибка
End Function
[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728


Сообщение отредактировал KuklP - Суббота, 22.09.2012, 11:13
 
Ответить
СообщениеЛеш, для этого у регэксп есть метод тест. Чуть поправил твою ЮДФ:
[vba]
Code
Function ИЗВЛЕЧЬ_ЦЕЛЫЕ(ParamArray Диапазон())
        Dim rArea, rCell, sStr$, i&
        For Each rArea In Диапазон
            For Each rCell In IIf(rArea.Count = 1, Array(rArea.Value), rArea.Value)
                sStr = sStr & " " & rCell
            Next rCell
        Next rArea
        With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = "\b\d+\b" ' чтоб адреса ячеек не считала:-)
            If Not .test(sStr) Then Exit Function
                With .Execute(sStr)
                ReDim Arr(1 To .Count)
                For i = 0 To .Count - 1: Arr(i + 1) = CLng(.Item(i).Value): Next i
                ИЗВЛЕЧЬ_ЦЕЛЫЕ = Arr
            End With: End With
            'Зачем возвращать ошибку? Вернем 0
'    ИЗВЛЕЧЬ_ЦЕЛЫЕ = CVErr(xlErrValue)   ' вернуть ошибку #ЗНАЧЕНИЕ если была ошибка
End Function
[/vba]

Автор - KuklP
Дата добавления - 22.09.2012 в 10:50
Alex_ST Дата: Суббота, 22.09.2012, 21:38 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Серёга,
Вообще-то эта функция обсуждалась и дорабатывалась в топике Функция (UDF) "ИЗВЛЕЧЬЦЕЛЫЕ". А здесь я её просто применил.

И к тому же я не вижу преимуществ твоего кода перед моим.
Да и возвращать ошибку #ЗНАЧЕНИЕ если целых в стринге нет, ИМХО, логически вернее, чем возвращать 0. Ведь 0 - это тоже целое число и имеет полное право присутствовать в тексте



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеСерёга,
Вообще-то эта функция обсуждалась и дорабатывалась в топике Функция (UDF) "ИЗВЛЕЧЬЦЕЛЫЕ". А здесь я её просто применил.

И к тому же я не вижу преимуществ твоего кода перед моим.
Да и возвращать ошибку #ЗНАЧЕНИЕ если целых в стринге нет, ИМХО, логически вернее, чем возвращать 0. Ведь 0 - это тоже целое число и имеет полное право присутствовать в тексте

Автор - Alex_ST
Дата добавления - 22.09.2012 в 21:38
KuklP Дата: Суббота, 22.09.2012, 21:56 | Сообщение № 8
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Хорошо, поясню. Вместо встроенного метода test ты встраиваешь туда обработчик ошибок. Это само по себе одевание трусов через голову. Примени test и ошибок не будет. Мало того, ты еще и возвращаешь значение ошибки, которое в свою очередь придется обрабатывать, будь то на листе, или в коде. Зачем это в простой функции? Примени формулу СУММ к тексту. Она вернет 0. Не, ну это только мое мнение. Ты уж как посчитаешь нужным:-)


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеХорошо, поясню. Вместо встроенного метода test ты встраиваешь туда обработчик ошибок. Это само по себе одевание трусов через голову. Примени test и ошибок не будет. Мало того, ты еще и возвращаешь значение ошибки, которое в свою очередь придется обрабатывать, будь то на листе, или в коде. Зачем это в простой функции? Примени формулу СУММ к тексту. Она вернет 0. Не, ну это только мое мнение. Ты уж как посчитаешь нужным:-)

Автор - KuklP
Дата добавления - 22.09.2012 в 21:56
Alex_ST Дата: Суббота, 22.09.2012, 22:12 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Я, честно говоря, не понимаю, чем тебе так обработчик ошибок не нравится?
А по поводу того, что встроенная СУММ, применённая к тексту, возвращает 0, так это, ИМХО, не фича , а баг. Именно поэтому, когда я лепил эту ЮДФ-ку, я решил возвращать ошибку, когда чисел нет.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеЯ, честно говоря, не понимаю, чем тебе так обработчик ошибок не нравится?
А по поводу того, что встроенная СУММ, применённая к тексту, возвращает 0, так это, ИМХО, не фича , а баг. Именно поэтому, когда я лепил эту ЮДФ-ку, я решил возвращать ошибку, когда чисел нет.

Автор - Alex_ST
Дата добавления - 22.09.2012 в 22:12
KuklP Дата: Суббота, 22.09.2012, 22:31 | Сообщение № 10
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Я тоже не понимаю, чем тебе не нравится встроенный метод регексп. Это все равно, что в словарь добавлять новый ключ, предварительно проверяя его отсутствие в массиве, а не пользуясь методом exists:-) По поводу ошибок - на форумах через день возникает вопрос, как вместо значения ошибки выводить 0 или пустую строку. И пошла жара:
=если(еош(... А оно надо? Я еще понимаю сложные функции типа ВПР, индекс. Но в простых достаточно вернуть 0, или пустую строку.
Как я уже писал, это только мое мнение.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728


Сообщение отредактировал KuklP - Суббота, 22.09.2012, 22:34
 
Ответить
СообщениеЯ тоже не понимаю, чем тебе не нравится встроенный метод регексп. Это все равно, что в словарь добавлять новый ключ, предварительно проверяя его отсутствие в массиве, а не пользуясь методом exists:-) По поводу ошибок - на форумах через день возникает вопрос, как вместо значения ошибки выводить 0 или пустую строку. И пошла жара:
=если(еош(... А оно надо? Я еще понимаю сложные функции типа ВПР, индекс. Но в простых достаточно вернуть 0, или пустую строку.
Как я уже писал, это только мое мнение.

Автор - KuklP
Дата добавления - 22.09.2012 в 22:31
ikki Дата: Суббота, 22.09.2012, 22:59 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
как известно,
СУММ, примененная к диапазону ячеек, среди которых есть текстовые, эти текстовые ячейки пропускает.
если среди ячеек диапазона - все текстовые, то вернёт 0, а не ощибку.
имхо,
и это правильно.
какая тут может быть ошибка? мы пытались посчитать сумму того, чего нет - получили 0.
по аналогии - послали нас считать баранов в стадо КРС, где только быки и коровы. какой результат? 0 баранов.
так и здесь - послали мы функцию в диапазон считать сумму чисел, а чисел не нашлось.
результат=0.

другое дело, если некоторым пользователям в некоторых случаях необходимо различать, что это за 0.
ибо (отойдя от аналогии с баранами) числа в диапазоне могут быть, но их сумма даст тоже 0.
ну так для этого есть другие способы, не правда ли?
Code
=СЧЁТ()


поэтому, моё имхо на стороне Сергея.
хотя спорить можно до хрипоты. biggrin

а вот если среди диапазона ячеек будут ячейки с ошибками (по сути - неопределенность), то сказать, что "баранов" именно 0, мы не сможем.
кто его знает, что было в закрытом загоне? кто его знает, что там за #ЗНАЧ! в ячейке?
и СУММ(), примененная к такому диапазону, вернет ошибку.
и это тоже правильно.

безусловно, при разработке UDF автор волен руководствоваться своими представлениями, отличными от вышеприведенной логики.
имхо, это его полное право и, если поведение функции будет нормально описано - то проблем вызвать не должно.
чисто теоретически.
но практически все мы знаем, что процент людей, хотя бы читающих справку, исчезающе мал.
а уж вникающих во все нюансы - тем более.
сколько раз вам встречались на форумах вопли юзеров "ПРОСМОТР не работает!!!" и лишь после третьего тыка носом в предложение "данные должны быть упорядочены" вопли стихают (но, я подозреваю, обида остается на всю жизнь)

так стоит ли реализовывать свои UDF с "более правильной" логикой, отличной от привычной?


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениекак известно,
СУММ, примененная к диапазону ячеек, среди которых есть текстовые, эти текстовые ячейки пропускает.
если среди ячеек диапазона - все текстовые, то вернёт 0, а не ощибку.
имхо,
и это правильно.
какая тут может быть ошибка? мы пытались посчитать сумму того, чего нет - получили 0.
по аналогии - послали нас считать баранов в стадо КРС, где только быки и коровы. какой результат? 0 баранов.
так и здесь - послали мы функцию в диапазон считать сумму чисел, а чисел не нашлось.
результат=0.

другое дело, если некоторым пользователям в некоторых случаях необходимо различать, что это за 0.
ибо (отойдя от аналогии с баранами) числа в диапазоне могут быть, но их сумма даст тоже 0.
ну так для этого есть другие способы, не правда ли?
Code
=СЧЁТ()


поэтому, моё имхо на стороне Сергея.
хотя спорить можно до хрипоты. biggrin

а вот если среди диапазона ячеек будут ячейки с ошибками (по сути - неопределенность), то сказать, что "баранов" именно 0, мы не сможем.
кто его знает, что было в закрытом загоне? кто его знает, что там за #ЗНАЧ! в ячейке?
и СУММ(), примененная к такому диапазону, вернет ошибку.
и это тоже правильно.

безусловно, при разработке UDF автор волен руководствоваться своими представлениями, отличными от вышеприведенной логики.
имхо, это его полное право и, если поведение функции будет нормально описано - то проблем вызвать не должно.
чисто теоретически.
но практически все мы знаем, что процент людей, хотя бы читающих справку, исчезающе мал.
а уж вникающих во все нюансы - тем более.
сколько раз вам встречались на форумах вопли юзеров "ПРОСМОТР не работает!!!" и лишь после третьего тыка носом в предложение "данные должны быть упорядочены" вопли стихают (но, я подозреваю, обида остается на всю жизнь)

так стоит ли реализовывать свои UDF с "более правильной" логикой, отличной от привычной?

Автор - ikki
Дата добавления - 22.09.2012 в 22:59
Alex_ST Дата: Суббота, 22.09.2012, 23:10 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Ну, ладно. Пусть каждый останется при своих баранах.
Но всё равно, обсуждать ЮДФ-ку здесь не место, раз для неё есть специальный топик.
Ведь здесь решение, предложенное Сергеем, утонет послезавтра, а в "Готовых решениях" всё-таки не так "глубоко" и интересующиеся смогут найти хотя бы по названию топика (не то, что здесь biggrin )



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Суббота, 22.09.2012, 23:10
 
Ответить
СообщениеНу, ладно. Пусть каждый останется при своих баранах.
Но всё равно, обсуждать ЮДФ-ку здесь не место, раз для неё есть специальный топик.
Ведь здесь решение, предложенное Сергеем, утонет послезавтра, а в "Готовых решениях" всё-таки не так "глубоко" и интересующиеся смогут найти хотя бы по названию топика (не то, что здесь biggrin )

Автор - Alex_ST
Дата добавления - 22.09.2012 в 23:10
  • Страница 1 из 1
  • 1
Поиск:

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