Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Замена одного значения на другое - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Замена одного значения на другое
alexsampler Дата: Среда, 07.12.2011, 11:14 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Очень нужна помощь! cry
Программа выдает файл с массивом, где цифры с отрицательным значением отображаются как например: 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)

но оно не работает… surprised
Возможно, я его не правильно использую
Помогите пожалуйста, подскажите решение
И прежде чем предложить вариант решения протестируйте его пожалуйста на моем примере.
Спасибо!
К сообщению приложен файл: 401.rar (33.2 Kb)


счастливы не те кто имеют все лучшее, а те кто извлекают все лучшее из того, что имеют...
 
Ответить
СообщениеExcel 2003
Очень нужна помощь! cry
Программа выдает файл с массивом, где цифры с отрицательным значением отображаются как например: 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)

но оно не работает… surprised
Возможно, я его не правильно использую
Помогите пожалуйста, подскажите решение
И прежде чем предложить вариант решения протестируйте его пожалуйста на моем примере.
Спасибо!

Автор - alexsampler
Дата добавления - 07.12.2011 в 11:14
nilem Дата: Среда, 07.12.2011, 11:31 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
For example (keyboard layout does not switch smile )
Code
Sub ertert()
Dim r As Range
For Each r In [F:G].SpecialCells(2)
      If InStr(r, "-") Then r = Val(r) * -1
Next
End Sub
К сообщению приложен файл: 401-.zip (58.7 Kb)


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Среда, 07.12.2011, 11:31
 
Ответить
СообщениеFor example (keyboard layout does not switch smile )
Code
Sub ertert()
Dim r As Range
For Each r In [F:G].SpecialCells(2)
      If InStr(r, "-") Then r = Val(r) * -1
Next
End Sub

Автор - nilem
Дата добавления - 07.12.2011 в 11:31
alexsampler Дата: Среда, 07.12.2011, 11:45 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Boroda_, не совсем понял о каком текстовике речь? wacko tongue
- в пархиве 401-1903 это входной файл
- макрос это текст с кодом макроса
Вроде бы все что нужно положил smile


счастливы не те кто имеют все лучшее, а те кто извлекают все лучшее из того, что имеют...
 
Ответить
СообщениеBoroda_, не совсем понял о каком текстовике речь? wacko tongue
- в пархиве 401-1903 это входной файл
- макрос это текст с кодом макроса
Вроде бы все что нужно положил smile

Автор - alexsampler
Дата добавления - 07.12.2011 в 11:45
Hugo Дата: Среда, 07.12.2011, 11:59 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Скажите, Вам все строки нужны, или только те, где в начале цифра стоит?
Можно подойти к задаче с другой стороны...


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеСкажите, Вам все строки нужны, или только те, где в начале цифра стоит?
Можно подойти к задаче с другой стороны...

Автор - Hugo
Дата добавления - 07.12.2011 в 11:59
alexsampler Дата: Среда, 07.12.2011, 12:18 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

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, спасибо наиогромнейшее!!! biggrin

два вопроса
если не лень
напишите пожалуйста, что делает каждая строка вашего кода
и почему не работал приведенный мною код
я еще только учусь быть подмастерьем, знаний не хватает
СПАСИБО ЕЩЕ РАЗ !!!!


счастливы не те кто имеют все лучшее, а те кто извлекают все лучшее из того, что имеют...
 
Ответить
Сообщение
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, спасибо наиогромнейшее!!! biggrin

два вопроса
если не лень
напишите пожалуйста, что делает каждая строка вашего кода
и почему не работал приведенный мною код
я еще только учусь быть подмастерьем, знаний не хватает
СПАСИБО ЕЩЕ РАЗ !!!!

Автор - alexsampler
Дата добавления - 07.12.2011 в 12:18
_Boroda_ Дата: Среда, 07.12.2011, 12:41 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Вот так работает без дополнительных преобразований
Code
Sub tt()
          Workbooks.OpenText Filename:="C:\F102\3.txt", Origin:= _
              1251, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
              ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False, _
              Space:=False, Other:=False, FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3 _
              , 2), Array(4, 2), Array(5, 1), Array(6, 1)), DecimalSeparator:=".", _
              ThousandsSeparator:=",", TrailingMinusNumbers:=True
          With Columns("B:C")
              .ColumnWidth = 5.13
              .HorizontalAlignment = xlCenter
              .VerticalAlignment = xlBottom
              .WrapText = False
              .Orientation = 0
              .AddIndent = False
              .IndentLevel = 0
              .ShrinkToFit = False
              .ReadingOrder = xlContext
              .MergeCells = False
          End With
          Columns("D:D").ColumnWidth = 19.88
          Columns("D:D").ColumnWidth = 22.25
          Columns("E:I").ColumnWidth = 15.75
          Columns("E:I").Replace What:=" ", Replacement:="", LookAt:=xlPart, _
              SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
              ReplaceFormat:=False
              Columns("E:E").TextToColumns
              Columns("F:F").TextToColumns
              Columns("G:G").TextToColumns
              Columns("H:H").TextToColumns
              Columns("I:I").TextToColumns
           Columns("E:I").NumberFormat = "#,##0.00"
          Range("I10").Select
End Sub
К сообщению приложен файл: 402_1.xls (86.0 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВот так работает без дополнительных преобразований
Code
Sub tt()
          Workbooks.OpenText Filename:="C:\F102\3.txt", Origin:= _
              1251, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
              ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False, _
              Space:=False, Other:=False, FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3 _
              , 2), Array(4, 2), Array(5, 1), Array(6, 1)), DecimalSeparator:=".", _
              ThousandsSeparator:=",", TrailingMinusNumbers:=True
          With Columns("B:C")
              .ColumnWidth = 5.13
              .HorizontalAlignment = xlCenter
              .VerticalAlignment = xlBottom
              .WrapText = False
              .Orientation = 0
              .AddIndent = False
              .IndentLevel = 0
              .ShrinkToFit = False
              .ReadingOrder = xlContext
              .MergeCells = False
          End With
          Columns("D:D").ColumnWidth = 19.88
          Columns("D:D").ColumnWidth = 22.25
          Columns("E:I").ColumnWidth = 15.75
          Columns("E:I").Replace What:=" ", Replacement:="", LookAt:=xlPart, _
              SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
              ReplaceFormat:=False
              Columns("E:E").TextToColumns
              Columns("F:F").TextToColumns
              Columns("G:G").TextToColumns
              Columns("H:H").TextToColumns
              Columns("I:I").TextToColumns
           Columns("E:I").NumberFormat = "#,##0.00"
          Range("I10").Select
End Sub

Автор - _Boroda_
Дата добавления - 07.12.2011 в 12:41
nilem Дата: Среда, 07.12.2011, 13:00 | Сообщение № 7
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Quote (alexsampler)
напишите пожалуйста, что делает каждая строка вашего кода
и почему не работал приведенный мною код

Писать особо нечего (раскладка заработала - чудеса smile )
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() (у меня вылезает ошибка на текст по столбцам. Может и не надо его (ее, их)?)


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Среда, 07.12.2011, 13:05
 
Ответить
Сообщение
Quote (alexsampler)
напишите пожалуйста, что делает каждая строка вашего кода
и почему не работал приведенный мною код

Писать особо нечего (раскладка заработала - чудеса smile )
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
Дата добавления - 07.12.2011 в 13:00
Hugo Дата: Среда, 07.12.2011, 13:27 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
У меня тоже ругается - нет такого в 2003.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеУ меня тоже ругается - нет такого в 2003.

Автор - Hugo
Дата добавления - 07.12.2011 в 13:27
nilem Дата: Среда, 07.12.2011, 13:39 | Сообщение № 9
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Quote (_Boroda_)
А где ругается? У меня вроде все работает.

Останавливается здесь
Columns("E:E").TextToColumns
и пишет, что, мол, Не выделены данные для разбора
Ексель 2010

Ну да, перед этой строкой в ст. Е ничего нет, все находится в ст. А. Может так Columns("А:А").TextToColumns?
Только непонятно зачем. Вроде и так нормально.


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Среда, 07.12.2011, 13:43
 
Ответить
Сообщение
Quote (_Boroda_)
А где ругается? У меня вроде все работает.

Останавливается здесь
Columns("E:E").TextToColumns
и пишет, что, мол, Не выделены данные для разбора
Ексель 2010

Ну да, перед этой строкой в ст. Е ничего нет, все находится в ст. А. Может так Columns("А:А").TextToColumns?
Только непонятно зачем. Вроде и так нормально.

Автор - nilem
Дата добавления - 07.12.2011 в 13:39
Hugo Дата: Среда, 07.12.2011, 13:43 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
У меня вообще-то вообще по колонкам не раскидывает - всё в A лежит... sad
Ошибся - работает TextToColumns, если есть что обрабатывать:
Code
Columns("A:A").TextToColumns


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеУ меня вообще-то вообще по колонкам не раскидывает - всё в A лежит... sad
Ошибся - работает TextToColumns, если есть что обрабатывать:
Code
Columns("A:A").TextToColumns

Автор - Hugo
Дата добавления - 07.12.2011 в 13:43
nilem Дата: Среда, 07.12.2011, 13:50 | Сообщение № 11
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Кстати, недавно видел код, написанный специально для 2003, и там было (была, был - ну как все-таки? smile ) .TextToColumns.
Наверное, где-то есть все же.

Скорее всего "был" - метод как никак. Solved smile


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Среда, 07.12.2011, 13:52
 
Ответить
СообщениеКстати, недавно видел код, написанный специально для 2003, и там было (была, был - ну как все-таки? smile ) .TextToColumns.
Наверное, где-то есть все же.

Скорее всего "был" - метод как никак. Solved smile

Автор - nilem
Дата добавления - 07.12.2011 в 13:50
Hugo Дата: Среда, 07.12.2011, 13:56 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Да, есть. Просто не пользовался никогда...


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеДа, есть. Просто не пользовался никогда...

Автор - Hugo
Дата добавления - 07.12.2011 в 13:56
nilem Дата: Среда, 07.12.2011, 15:54 | Сообщение № 13
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
У меня так работает (2010)
Code
Sub Макрос6()
Workbooks.OpenText Filename:="D:\Загрузки\401\401-1903.txt", Origin:=1251, DataType:=xlDelimited, _
                    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Space:=True, _
                    FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 1), Array(6, 1)), _
                    DecimalSeparator:=".", ThousandsSeparator:=",", TrailingMinusNumbers:=True
Columns("B:C").ColumnWidth = 5.13
Columns("D").ColumnWidth = 22.25
Columns("E:I").ColumnWidth = 15.75
End Sub

В "D" (номера счетов, видимо) - текст, в "E:I" - числа.
Может, дело в настройках каких-нибудь?


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеУ меня так работает (2010)
Code
Sub Макрос6()
Workbooks.OpenText Filename:="D:\Загрузки\401\401-1903.txt", Origin:=1251, DataType:=xlDelimited, _
                    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Space:=True, _
                    FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 1), Array(6, 1)), _
                    DecimalSeparator:=".", ThousandsSeparator:=",", TrailingMinusNumbers:=True
Columns("B:C").ColumnWidth = 5.13
Columns("D").ColumnWidth = 22.25
Columns("E:I").ColumnWidth = 15.75
End Sub

В "D" (номера счетов, видимо) - текст, в "E:I" - числа.
Может, дело в настройках каких-нибудь?

Автор - nilem
Дата добавления - 07.12.2011 в 15:54
Hugo Дата: Среда, 07.12.2011, 21:50 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
А если ответите на мой вопрос - то может быть ещё вариант будет...


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеА если ответите на мой вопрос - то может быть ещё вариант будет...

Автор - Hugo
Дата добавления - 07.12.2011 в 21:50
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!