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

Вход

Регистрация

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

 

= Мир MS Excel/Очистка чисел от лишних символов - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Очистка чисел от лишних символов
user0 Дата: Четверг, 02.02.2017, 12:46 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Доброго времени суток,

Помогите, пожалуйста, привести к нормальному виду отрицательные числа в нескольких столбцах на vba, выгружаются они в таком виде:
Код
               1-

Всего строк ~30k, и ~20 колонок, такие числа встречаются в трех. Имена колонок всегда одинаковы, порядок вроде тоже не меняется.

зы. формулами это как-то так выглядит
Код
=IF(ISNUMBER(SEARCH("-",A2)),SUBSTITUTE(TRIM(A2),"-","")*-1,A2)
К сообщению приложен файл: fix_negative.xlsm (19.3 Kb)


Сообщение отредактировал user0 - Четверг, 02.02.2017, 12:48
 
Ответить
СообщениеДоброго времени суток,

Помогите, пожалуйста, привести к нормальному виду отрицательные числа в нескольких столбцах на vba, выгружаются они в таком виде:
Код
               1-

Всего строк ~30k, и ~20 колонок, такие числа встречаются в трех. Имена колонок всегда одинаковы, порядок вроде тоже не меняется.

зы. формулами это как-то так выглядит
Код
=IF(ISNUMBER(SEARCH("-",A2)),SUBSTITUTE(TRIM(A2),"-","")*-1,A2)

Автор - user0
Дата добавления - 02.02.2017 в 12:46
Timber_Wolf Дата: Четверг, 02.02.2017, 14:07 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
user0, Оно? )
К сообщению приложен файл: 9337322.xlsm (33.4 Kb)
 
Ответить
Сообщениеuser0, Оно? )

Автор - Timber_Wolf
Дата добавления - 02.02.2017 в 14:07
user0 Дата: Четверг, 02.02.2017, 16:10 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Да, работает, спасибо.
Только убрал замену точки, а то пропадали десятичные, если формат отличный от русского.

Подскажите еще, пожалуйста, как обозвать переменные, чтобы работало при Option Explicit.
 
Ответить
СообщениеДа, работает, спасибо.
Только убрал замену точки, а то пропадали десятичные, если формат отличный от русского.

Подскажите еще, пожалуйста, как обозвать переменные, чтобы работало при Option Explicit.

Автор - user0
Дата добавления - 02.02.2017 в 16:10
Manyasha Дата: Четверг, 02.02.2017, 16:16 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 902 ±
Замечаний: 0% ±

Excel 2010, 2016
user0, здравствуйте.
как обозвать переменные

их уже обозвали)) Нужно объявить:
[vba]
Код
Dim arr, i As Long, t As String
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеuser0, здравствуйте.
как обозвать переменные

их уже обозвали)) Нужно объявить:
[vba]
Код
Dim arr, i As Long, t As String
[/vba]

Автор - Manyasha
Дата добавления - 02.02.2017 в 16:16
Kuzmich Дата: Четверг, 02.02.2017, 16:16 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 717
Репутация: 159 ±
Замечаний: 0% ±

Excel 2003
А так, проверьте
[vba]
Код

Sub iMinus()
Dim cell As Range
Dim n As Integer
Dim flag As Boolean
Dim temp As String
  For Each cell In Range("A1").CurrentRegion
    If InStr(1, cell, "-") = Len(cell) Then
      cell = Trim(Replace(cell, ".", ","))
       flag = False
       For n = Len(cell) To 1 Step -1
         If flag Then
           If Mid(cell, n, 1) = "," Then
             temp = cell
               Mid(temp, n, 1) = " "
             cell = temp
           End If
         Else
           If Mid(cell, n, 1) = "," Then
             flag = True
           End If
         End If
       Next
      cell = Mid(cell, 1, Len(cell) - 1) * (-1)
    End If
  Next
End Sub
[/vba]
 
Ответить
СообщениеА так, проверьте
[vba]
Код

Sub iMinus()
Dim cell As Range
Dim n As Integer
Dim flag As Boolean
Dim temp As String
  For Each cell In Range("A1").CurrentRegion
    If InStr(1, cell, "-") = Len(cell) Then
      cell = Trim(Replace(cell, ".", ","))
       flag = False
       For n = Len(cell) To 1 Step -1
         If flag Then
           If Mid(cell, n, 1) = "," Then
             temp = cell
               Mid(temp, n, 1) = " "
             cell = temp
           End If
         Else
           If Mid(cell, n, 1) = "," Then
             flag = True
           End If
         End If
       Next
      cell = Mid(cell, 1, Len(cell) - 1) * (-1)
    End If
  Next
End Sub
[/vba]

Автор - Kuzmich
Дата добавления - 02.02.2017 в 16:16
user0 Дата: Четверг, 02.02.2017, 17:08 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Manyasha
их уже обозвали)) Нужно объявить:
Благодарю )

Kuzmich
А так, проверьте
в строке
Код
cell = Mid(cell, 1, Len(cell) - 1) * (-1)
спотыкается о первое число c разделителем групп разрядов ",", потом о число с несколькими разделителями групп разрядом и также удаляет ".", что лишнее в моем случае )

В целом вариант, предложеный Timber_Wolf, работает, так что наверное можно считать вопрос закрытым.
Спасибо еще раз всем.
 
Ответить
СообщениеManyasha
их уже обозвали)) Нужно объявить:
Благодарю )

Kuzmich
А так, проверьте
в строке
Код
cell = Mid(cell, 1, Len(cell) - 1) * (-1)
спотыкается о первое число c разделителем групп разрядов ",", потом о число с несколькими разделителями групп разрядом и также удаляет ".", что лишнее в моем случае )

В целом вариант, предложеный Timber_Wolf, работает, так что наверное можно считать вопрос закрытым.
Спасибо еще раз всем.

Автор - user0
Дата добавления - 02.02.2017 в 17:08
Kuzmich Дата: Четверг, 02.02.2017, 17:19 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 717
Репутация: 159 ±
Замечаний: 0% ±

Excel 2003
Цитата
спотыкается о первое число c разделителем групп разрядов ","

Я их вроде заменил на пробел
Цитата
также удаляет "."

Разделителем десятичной части является запятая, макрос заменяет точку на запятую
 
Ответить
Сообщение
Цитата
спотыкается о первое число c разделителем групп разрядов ","

Я их вроде заменил на пробел
Цитата
также удаляет "."

Разделителем десятичной части является запятая, макрос заменяет точку на запятую

Автор - Kuzmich
Дата добавления - 02.02.2017 в 17:19
user0 Дата: Пятница, 03.02.2017, 00:08 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Разделителем десятичной части является запятая
к сожалению не всегда (

а так да, заработало после смены форматов с english на russian. Поковыряю потом на досуге чтобы и для формата отличного от русского работало.
 
Ответить
Сообщение
Разделителем десятичной части является запятая
к сожалению не всегда (

а так да, заработало после смены форматов с english на russian. Поковыряю потом на досуге чтобы и для формата отличного от русского работало.

Автор - user0
Дата добавления - 03.02.2017 в 00:08
Kamikadze_N Дата: Пятница, 03.02.2017, 08:17 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 75
Репутация: 6 ±
Замечаний: 0% ±

Excel 2010
user0, вот тоже вариант, и запятая в покое остается
К сообщению приложен файл: fix_negative-3-.xlsm (39.5 Kb)


Сообщение отредактировал Kamikadze_N - Пятница, 03.02.2017, 08:26
 
Ответить
Сообщениеuser0, вот тоже вариант, и запятая в покое остается

Автор - Kamikadze_N
Дата добавления - 03.02.2017 в 08:17
user0 Дата: Пятница, 03.02.2017, 13:40 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Kamikadze_N
Да, тоже работает. Спасибо )
 
Ответить
СообщениеKamikadze_N
Да, тоже работает. Спасибо )

Автор - user0
Дата добавления - 03.02.2017 в 13:40
RAN Дата: Суббота, 04.02.2017, 11:50 | Сообщение № 11
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
и запятая в покое остается

В числах, записанныф в формате "#,##0.00". А в формате "# ##0,00" пропадает.
Для любых чисел, включая числа в текстовом формате, содержащие пробел, или неразрывный пробел (как любит 1С выгружать) при русских или американских системных разделителях.
[vba]
Код
Sub RestoreNumbers()
    Dim ar, sValue$, sVal#
    Dim i&, j&
    ar = [a1].CurrentRegion.Value
    On Error Resume Next
    For i = 1 To UBound(ar)
        For j = 1 To UBound(ar, 2)
            If Err Then Err.Clear
            sValue = Replace(Replace(ar(i, j), Chr(32), ""), Chr(160), "")
            If Len(sValue) Then
                ar(i, j) = CDbl(ar(i, j))
                If Err Then
                    Err.Clear
                    sVal = Val(Replace(sValue, ",", ""))
                    If sVal <> 0 Then
                        ar(i, j) = IIf(Len(sVal) = Len(sValue), sVal, -sVal)
                    End If
                End If
            End If
        Next
    Next
    [a1].Resize(UBound(ar), UBound(ar, 2)) = ar
End Sub
[/vba]
К сообщению приложен файл: fix_negative-Al.xlsm (24.7 Kb)


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Суббота, 04.02.2017, 12:00
 
Ответить
Сообщение
и запятая в покое остается

В числах, записанныф в формате "#,##0.00". А в формате "# ##0,00" пропадает.
Для любых чисел, включая числа в текстовом формате, содержащие пробел, или неразрывный пробел (как любит 1С выгружать) при русских или американских системных разделителях.
[vba]
Код
Sub RestoreNumbers()
    Dim ar, sValue$, sVal#
    Dim i&, j&
    ar = [a1].CurrentRegion.Value
    On Error Resume Next
    For i = 1 To UBound(ar)
        For j = 1 To UBound(ar, 2)
            If Err Then Err.Clear
            sValue = Replace(Replace(ar(i, j), Chr(32), ""), Chr(160), "")
            If Len(sValue) Then
                ar(i, j) = CDbl(ar(i, j))
                If Err Then
                    Err.Clear
                    sVal = Val(Replace(sValue, ",", ""))
                    If sVal <> 0 Then
                        ar(i, j) = IIf(Len(sVal) = Len(sValue), sVal, -sVal)
                    End If
                End If
            End If
        Next
    Next
    [a1].Resize(UBound(ar), UBound(ar, 2)) = ar
End Sub
[/vba]

Автор - RAN
Дата добавления - 04.02.2017 в 11:50
user0 Дата: Воскресенье, 05.02.2017, 05:23 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
RAN,
И вам спасибо!

зы. вообще, надо сказать, не подозревал, что задача усложнится из-за разницы в региональных настройках.
 
Ответить
СообщениеRAN,
И вам спасибо!

зы. вообще, надо сказать, не подозревал, что задача усложнится из-за разницы в региональных настройках.

Автор - user0
Дата добавления - 05.02.2017 в 05:23
  • Страница 1 из 1
  • 1
Поиск:

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