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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2011, 11:18   #1
alexsampler
Пользователь
 
Регистрация: 29.03.2011
Сообщений: 86
По умолчанию Замена одного значения на другое

Excel 2003
Очень нужна помощь!
Программа выдает файл с массивом, где цифры с отрицательным значением отображаются как например: 1,234.56- а нужно что бы было -1 234.56 (кол-во знаков и разряды могут быть разными)
В макросе с помощью мастера текста и функции автозамены (Ctrl+H) удается добиться лишь варианта 1234.56- , дальше чего бы не делал ни формат и само значение изменить не удается. Что бы добиться нужного формата приходиться убирать минус (-), НО тогда значение становится положительным 1 234.56, а это не приемлемо (нужно именно отрицательное число)
Выкладываю исходный файл из программы, и фал с макросом, которым преобразую текст в Excel , ну и пример того, что получается…
Мне предложили вот такое решение:

Цитата:
Dim s
s = "123.45-"
Debug.Print Val(s) * IIf(Right$(s, 1) = "-", -1, 1)
s = "-123.45"
Debug.Print Val(s) * IIf(Right$(s, 1) = "-", -1, 1)
s = "123.45"
Debug.Print Val(s) * IIf(Right$(s, 1) = "-", -1, 1)
но оно не работает…
Возможно, я его не правильно использую
Помогите пожалуйста, подскажите решение
И прежде чем предложить вариант решения протестируйте его пожалуйста на моем примере.
Спасибо!
Вложения
Тип файла: rar 401.rar (33.2 Кб, 11 просмотров)
alexsampler вне форума Ответить с цитированием
Старый 07.12.2011, 13:33   #2
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Можно создать процедуру и вызвать её из процедуры импорта
Код:
''''''''''''''' тут вся процедура импорта
ZNAK
End Sub

Sub ZNAK()
Dim J
For J = 10 To Cells(Rows.Count, 6).End(xlUp).Row
Cells(J, 6).Value = Val(Cells(J, 6).Value) * IIf(Right$(Cells(J, 6).Value, 1) = "-", -1, 1)
Cells(J, 7).Value = Val(Cells(J, 7).Value) * IIf(Right$(Cells(J, 7).Value, 1) = "-", -1, 1)
Next J
End Sub
Только разделительный знак станет запятая.
Если это принципиально - дописать Replace
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru

Последний раз редактировалось alex77755; 07.12.2011 в 13:35.
alex77755 вне форума Ответить с цитированием
Старый 08.12.2011, 13:06   #3
alexsampler
Пользователь
 
Регистрация: 29.03.2011
Сообщений: 86
По умолчанию

Цитата:
Сообщение от alex77755 Посмотреть сообщение
Можно создать процедуру и вызвать её из процедуры импорта
Код:
''''''''''''''' тут вся процедура импорта
ZNAK
End Sub

Sub ZNAK()
Dim J
For J = 10 To Cells(Rows.Count, 6).End(xlUp).Row
Cells(J, 6).Value = Val(Cells(J, 6).Value) * IIf(Right$(Cells(J, 6).Value, 1) = "-", -1, 1)
Cells(J, 7).Value = Val(Cells(J, 7).Value) * IIf(Right$(Cells(J, 7).Value, 1) = "-", -1, 1)
Next J
End Sub
Только разделительный знак станет запятая.
Если это принципиально - дописать Replace
Вы знаете условием как раз таки является оставлять разделитель точку, я об этом забыл указать, работаю с несколькими рабочими комплексами, там условие именно точка!!!
alexsampler вне форума Ответить с цитированием
Старый 08.12.2011, 13:09   #4
alexsampler
Пользователь
 
Регистрация: 29.03.2011
Сообщений: 86
По умолчанию

Всем, кому интересно
На самом деле решение найдено и оно оказалось вполне красивым и простым:
в конец макроса был дописан следующий код:
Цитата:
Dim r As Range
For Each r In [C:G].SpecialCells(2)
If InStr(r, "-") Then r = Val(r) * -1
Next
alexsampler вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Date из одного окна в другое окно delphicoding Общие вопросы Delphi 8 27.07.2011 19:53
Замена одного слова на другое в массиве строк С++ Тома1993 Помощь студентам 0 17.03.2011 21:52
Перевод с одного значения в другое в С++ 2008 atlon Общие вопросы C/C++ 11 11.01.2009 00:34
Перетаскивание значения одного поля в другое inret Общие вопросы Delphi 3 09.05.2008 15:26
[Delphi] Замена одного слова на другое... ZhooZhik Помощь студентам 5 09.01.2008 23:31