Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2014, 17:13   #1
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию использование пользовательских функций

Всем привет. Ребята, напишите, пожалуйста, подробно как использовать пользовательскии функции (Function) в программах. Например, у меня есть функция DeleteTextInBrackets:
Код:
Private Function DeleteTextInBrackets$(iText$)
    Dim iStart%, iLength%
    Do While iText Like "*[[]*]*"
       iStart = InStr(iText, "[")
       iLength = InStr(iStart, iText, "]") - iStart + 1
       iText = Application.Replace(iText, iStart, iLength, "")
    Loop
    DeleteTextInBrackets = iText
End Function
Эта функция удаляет текст, находящийся между двумя парными скобками [ ], включая сами скобки. Как ею пользоваться?
Jaroslav вне форума Ответить с цитированием
Старый 11.07.2014, 17:18   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Например так:
Код:
Sub tt()
    Dim s$
    s = "asdad [njf] dfgd [ete]hfh"
    MsgBox s
    s = DeleteTextInBrackets(s)
    MsgBox s
End Sub
код функции положите где-то там же в модуле (или в другом, если убрать Private).
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 11.07.2014, 17:24   #3
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию

Спасибо, Hugo121. А можно ли применить функцию, которую я написал, например, к диапазону А1:А10?
Jaroslav вне форума Ответить с цитированием
Старый 11.07.2014, 17:30   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

одна беда при вложенных скобках:
с такой строки
"a[b[c]d]e"
после удаления останется
"ad]e"

Вы на это рассчитывали???
по моим представлениям должно остаться "ae"
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 11.07.2014, 17:33   #5
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию

IgorGO, конечно нет
Jaroslav вне форума Ответить с цитированием
Старый 11.07.2014, 17:49   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Можно и к диапазону - на листе как стандартную, или в коде перебирать ячейки и каждую обрабатывать.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 11.07.2014, 17:50   #7
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию

применение функции, которую я написал, к диапазону А1:А10:
Код:
Sub Испозование_функции()
Dim i As Integer
For i = 1 To 10
    Cells(i, 1) = DeleteTextInBrackets(Cells(i, 1).Value)
Next
End Sub
Jaroslav вне форума Ответить с цитированием
Старый 11.07.2014, 18:24   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

исходная ___Результаты
строка _____Ваша _Эта
"a[b[c]d]e" _"ad]e" _"ae"
"a[b[c]de" __"ade" __"a[bde"


Код:
Private Function DeleteTextInBrackets$(iText$)
    Dim iStart%, iEnd%
    If iText Like "*[[]*]*" Then
       iStart = InStr(iText, "[")
       iEnd = InStr(iStart, iText, "]")
       Do While InStr(iStart + 1, iText, "[") > 0 And InStr(iStart + 1, iText, "[") < iEnd
         iStart = InStr(iStart + 1, iText, "[")
       Loop
       iText = DeleteTextInBrackets(Application.Replace(iText, iStart, iEnd - iStart + 1, ""))
    End If
    DeleteTextInBrackets = iText
End Function
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 11.07.2014, 18:46   #9
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
"a[b[c]de" __"ade" __"a[bde"
а почему не "ade" ?
eval вне форума Ответить с цитированием
Старый 11.07.2014, 19:09   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

потому что по предложенному алгоритму удаляются сначала внутренние пары скобок (удалились скобки вокруг С, а первая осталась без пары вот и не удалена.

я вообще-то не знаю, что на самом деле нужно удалять автору темы)))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Максимальный и минимальный элементы массива. Программирование пользовательских функций. Serg017 Общие вопросы C/C++ 12 30.04.2014 22:02
Создание пользовательских функций Riona Общие вопросы C/C++ 1 12.04.2012 11:13
Программа с применением пользовательских функций,которая осуществляет выбор способа обмена данными NIKI18 C++ Builder 0 19.12.2011 19:32
Создание пользовательских функций для обработки числовой информации. Larisa7 Помощь студентам 1 16.12.2011 18:40
Создание пользовательских функций Lain. Помощь студентам 0 23.12.2010 23:23