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)
но оно не работает… Возможно, я его не правильно использую Помогите пожалуйста, подскажите решение И прежде чем предложить вариант решения протестируйте его пожалуйста на моем примере. Спасибо!
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)
но оно не работает… Возможно, я его не правильно использую Помогите пожалуйста, подскажите решение И прежде чем предложить вариант решения протестируйте его пожалуйста на моем примере. Спасибо!alexsampler
Boroda_, не совсем понял о каком текстовике речь? - в пархиве 401-1903 это входной файл - макрос это текст с кодом макроса Вроде бы все что нужно положил
Boroda_, не совсем понял о каком текстовике речь? - в пархиве 401-1903 это входной файл - макрос это текст с кодом макроса Вроде бы все что нужно положил alexsampler
счастливы не те кто имеют все лучшее, а те кто извлекают все лучшее из того, что имеют...
Формула или Код VBA: Sub ertert() Dim r As Range For Each r In [F:G].SpecialCells(2) If InStr(r, "-") Then r = Val® * -1 Next End Sub
nilem, спасибо наиогромнейшее!!!
два вопроса если не лень напишите пожалуйста, что делает каждая строка вашего кода и почему не работал приведенный мною код я еще только учусь быть подмастерьем, знаний не хватает СПАСИБО ЕЩЕ РАЗ !!!!
Quote (nilem)
For example (keyboard layout does not switch )
Формула или Код VBA: Sub ertert() Dim r As Range For Each r In [F:G].SpecialCells(2) If InStr(r, "-") Then r = Val® * -1 Next End Sub
nilem, спасибо наиогромнейшее!!!
два вопроса если не лень напишите пожалуйста, что делает каждая строка вашего кода и почему не работал приведенный мною код я еще только учусь быть подмастерьем, знаний не хватает СПАСИБО ЕЩЕ РАЗ !!!!alexsampler
счастливы не те кто имеют все лучшее, а те кто извлекают все лучшее из того, что имеют...
напишите пожалуйста, что делает каждая строка вашего кода и почему не работал приведенный мною код
Писать особо нечего (раскладка заработала - чудеса ) For Each r In [F:G].SpecialCells(2) If InStr(r, "-") Then r = Val® * -1 смотрим каждую заполненную ячейку в столбцах F:G, и, если в ней (в ячейке) наблюдается минус, то преобразовываем значение ячейки в число и умножаем на -1. Если встречаются запятые в качестве разделителей разрядов, то можно так дополнить
Code
If InStr(r, "-") Then r = Val(Replace(r, ",", "")) * -1
ваш код делает то же самое, но не изменяет ячейки, а записывает значения в окне Immediate.
А лучше используйте Макрос5 Александра (Борода) - текстовик открывается сразу в нужном виде.
Только вот он убрал Макрос5 и оставил Sub tt() (у меня вылезает ошибка на текст по столбцам. Может и не надо его (ее, их)?)
Quote (alexsampler)
напишите пожалуйста, что делает каждая строка вашего кода и почему не работал приведенный мною код
Писать особо нечего (раскладка заработала - чудеса ) For Each r In [F:G].SpecialCells(2) If InStr(r, "-") Then r = Val® * -1 смотрим каждую заполненную ячейку в столбцах F:G, и, если в ней (в ячейке) наблюдается минус, то преобразовываем значение ячейки в число и умножаем на -1. Если встречаются запятые в качестве разделителей разрядов, то можно так дополнить
Code
If InStr(r, "-") Then r = Val(Replace(r, ",", "")) * -1
ваш код делает то же самое, но не изменяет ячейки, а записывает значения в окне Immediate.
А лучше используйте Макрос5 Александра (Борода) - текстовик открывается сразу в нужном виде.
Только вот он убрал Макрос5 и оставил Sub tt() (у меня вылезает ошибка на текст по столбцам. Может и не надо его (ее, их)?)nilem
Яндекс.Деньги 4100159601573
Сообщение отредактировал nilem - Среда, 07.12.2011, 13:05
Останавливается здесь Columns("E:E").TextToColumns и пишет, что, мол, Не выделены данные для разбора Ексель 2010
Ну да, перед этой строкой в ст. Е ничего нет, все находится в ст. А. Может так Columns("А:А").TextToColumns? Только непонятно зачем. Вроде и так нормально.
Quote (_Boroda_)
А где ругается? У меня вроде все работает.
Останавливается здесь Columns("E:E").TextToColumns и пишет, что, мол, Не выделены данные для разбора Ексель 2010
Ну да, перед этой строкой в ст. Е ничего нет, все находится в ст. А. Может так Columns("А:А").TextToColumns? Только непонятно зачем. Вроде и так нормально.nilem
Яндекс.Деньги 4100159601573
Сообщение отредактировал nilem - Среда, 07.12.2011, 13:43