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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2012, 11:49   #1
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию оператор split

привет! с Новым годом всех!))))
но начинаются трудовые будни Т_Т

уважаемые форумчане, помогите поподробнее разобраться с оператором split

есть такое выражение: "1-9, 97, 99".
надо разбить его так, чтоб в итоге вышло:

Код:
If i >=1 and i<=9 and i=97 and i=99 Then '... какой-то код
где i - переменная

в общем, как разделить по запятой - понятно:

Код:
For each iCase in Split("1-9, 97, 99", ",")
   If iCase is Numeric Then 
      If i = iCase Then '... какой-то код
      End if
   Else         
      'ДАЛЬШЕ Я ТЕРЯЮСЬ, ЧТО ДЕЛАТЬ 
      'остаются "1-9", и как написать, чтоб получилось нужное условие?.. 
   End if
я понимаю так, что при разбивке с помощью split в результате получается массив... может как-то через массив можно получить нужное (т.е. чтоб остались только числа нужного диапазона)??
может вообще можно каким-то другим способом это получить?

подскажите пожалуйста)
Bape}l{ka вне форума Ответить с цитированием
Старый 11.01.2012, 11:56   #2
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
По умолчанию

А что если сначала с помощью Replace заменить - на , а потом уже использовать Split
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума Ответить с цитированием
Старый 11.01.2012, 12:28   #3
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Оформил в виде функции, пробуйте
Код:
Function InList(s$, i&) As Boolean
Dim x, y
For Each x In Split(s, ",")
    If IsNumeric(x) Then
        If x = i Then InList = True: Exit Function
    Else
        y = Split(x, "-")
        If i >= y(0) And i <= y(1) Then InList = True: Exit Function
    End If
Next
End Function

Sub test()
Dim i&
For i = 0 To 100
    If InList("1-9, 97, 99", i) Then Debug.Print i
Next
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 11.01.2012, 12:35   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

нечто похожее:
Код:
Function IsNinStr(n, s0 As String) As Boolean
  Dim i As Long
  IsNinStr = True
  For i = 0 To UBound(Split(s0, ","))
    If InStr(Split(s0, ",")(i), "-") > 0 Then
      If n >= Val(Trim(Split(Split(s0, ",")(i), "-")(0))) And _
         n <= Val(Trim(Split(Split(s0, ",")(i), "-")(1))) Then Exit Function
    Else
      If n = Val(Trim(Split(s0, ",")(i))) Then Exit Function
    End If
  Next
  IsNinStr = False
End Function
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 11.01.2012 в 13:09.
IgorGO вне форума Ответить с цитированием
Старый 11.01.2012, 12:47   #5
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

Казанский, собственно так примерно я и делала, только Вы более четко прописали условия. а за оформленную функцию спасибо большое!))

т.е. если я правильно понимаю, она сработает и при нескольких диапазонах с условием "-", например "1-9", "15-18" и т.д.? т.е. выражение изначально выглядит так "1-9,15-18,97,99"

Последний раз редактировалось Bape}l{ka; 11.01.2012 в 12:50.
Bape}l{ka вне форума Ответить с цитированием
Старый 11.01.2012, 13:07   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Вот этого не понимаю:
If x = i
Как это " 2" может быть равно 2?
И никаких Val() и/или Trim() не нужно?... и ведь работает...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 11.01.2012, 13:17   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

тип для х не задан явно, вот эксель и привел " 2" к 2. почему он это сделал можно, конечно, догадаться, а вот почитать бы точное описание правил приведения типов было бы полезно
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 11.01.2012, 13:31   #8
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

спасибо всем большое за помощь и подсказки)))

Казанский, ваша функция прекрасно работает, и это как раз то, что мне было нужно. радует, что я и сама была на правильном пути =ь

IgorGO, с вашей функцией буду разбираться, т.к. не все понятно, но... Дорогу осилит идущий! )) спасибо за альтернативный вариант, это тоже очень полезно в качестве опыта
Bape}l{ka вне форума Ответить с цитированием
Старый 11.01.2012, 13:51   #9
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

> Как это " 2" может быть равно 2?
И никаких Val() и/или Trim() не нужно?... и ведь работает...

> почитать бы точное описание правил приведения типов было бы полезно

Пожалуйста, F1 - Comparison Operators
Цитата:
If One expression is a numeric data type and the other is a Variant that is, or can be, a number Then Perform a numeric comparison.
Есть тонкость:
Цитата:
If One Variant expression is numeric and the other is a string Then The numeric expression is less than the string expression.
Вот поэтому на листе Excel любое число всегда меньше любой строки - там все значения типа Variant.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619

Последний раз редактировалось Казанский; 11.01.2012 в 13:57.
Казанский вне форума Ответить с цитированием
Старый 11.01.2012, 14:04   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Спасибо.
Не забыть бы...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция Split 0creator0 Microsoft Office Excel 32 17.09.2011 16:36
Аналог Split в Delphi? apromix Помощь студентам 6 21.09.2010 22:17
Split Text ZuBy Общие вопросы Delphi 6 27.06.2010 01:47
Split(); Alex_sim Общие вопросы .NET 2 08.05.2010 20:03