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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2009, 17:50   #1
Oooleg
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 39
По умолчанию Проблема с функцией Replace...

Всех приветствую!
Необходимо в значении ячейки убрать все что находится после запятой (включая и ее саму), пишу вроде как все :

curWS = Replace(Cells(i + 3, 1).Value, ", *", "", , , vbTextCompare)

или без пробела

curWS = Replace(Cells(i + 3, 1).Value, ",*", "", , , vbTextCompare)

ничего не удаляется...

содержимое ячейки примерно такое "-402.021, 8 "

Подскажите пожалуйста где собака порылась...
Oooleg вне форума Ответить с цитированием
Старый 01.09.2009, 18:00   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

А так не проще будет (пример):

Код:
a = "3,5"
b = Split(a, ",")

MsgBox (b(0))
motorway вне форума Ответить с цитированием
Старый 01.09.2009, 18:19   #3
Oooleg
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 39
По умолчанию

Цитата:
Сообщение от motorway Посмотреть сообщение
А так не проще будет (пример):

Код:
a = "3,5"
b = Split(a, ",")

MsgBox (b(0))
ну во всяком случае работает... спасибо,

А теперь как удалить все что до запятой (вместе с ней)?
Oooleg вне форума Ответить с цитированием
Старый 01.09.2009, 18:19   #4
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

msgbox(b(1))
motorway вне форума Ответить с цитированием
Старый 01.09.2009, 18:22   #5
Oooleg
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 39
По умолчанию

искренне благодарен!
Oooleg вне форума Ответить с цитированием
Старый 01.09.2009, 18:46   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Собака порылась в строковых функциях.
Все, что до запятой:
Код:
Mid(Cells(i + 3, 1).Value, 1, InStr(Cells(i + 3, 1).Value, ",")-1)
Все, что после запятой:
Код:
Mid(Cells(i + 3, 1).Value, InStr(Cells(i + 3, 1).Value, ",")+1)
Функция Replace не понимает подстановочных знаков.
Использовать Split здесь, по-моему, не разумно. Как из пушки по воробьям
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 01.09.2009, 18:51   #7
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Ну можно проверить на большом массиве, что быстрее будет. Я обычно, когда надо получить какую-то часть строки перед символом, пользуюсь Split (Explode)
motorway вне форума Ответить с цитированием
Старый 02.09.2009, 05:22   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Использовать Split здесь, по-моему, не разумно
Цитата:
Ну можно проверить на большом массиве, что быстрее будет.
С Вашего позволения, попытаюсь пояснить.
Все зависит от того, что нужно возвращать в случаях, если в просматриваемом диапазоне запятых несколько, или, например, нет ни одной. К сожалению, автор вопроса этого не оговаривает.

Код с использованием функции Split несомненно, быстрее. Но если запятых нет, будет ошибка. Ее, конечно, можно отловить и вернуть требуемое значение. Если же запятых несколько, то результатом будет только то, что находится между 1-й и 2-й запятыми. Так что потребуется сцеплять элементы массива через запятую, начиная с 1-го (не 0-го). Что потребует дополнительного времени.

Код от viter.alex, в случае, если есть хотя бы одна запятая, вернет все, что после первой запятой, не зависимо от того, есть ли они еще. В случае, если нет ни одной запятой, будет возвращена вся строка. Так нужно, или нет, знает только автор (но молчит).

Вывод: пока мы не узнаем, какие возможны варианты исходных значений, и что делать в том или ином случае, говорить о том, какой из предложенных вариантов рациональнее, нельзя.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с рекурсивной функцией world12_tk Помощь студентам 2 04.03.2009 20:57
Проблема с функцией замены... dast Microsoft Office Excel 6 09.10.2008 20:30
проблема с функцией atoi Darw1n Общие вопросы C/C++ 2 08.10.2008 23:21
codeblocks - проблема с функцией main() хиппан Общие вопросы C/C++ 2 04.01.2008 19:41