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

Вход

Регистрация

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

 

= Мир MS Excel/округление с учетом значения числа - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » округление с учетом значения числа (Макросы/Sub)
округление с учетом значения числа
al-shadow Дата: Вторник, 21.07.2015, 12:06 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте!
В книгу вставляется массив числовых значений, которые необходимо округлять или уменьшить разрядность по правилу: если значение меньше 1, то до 4 знака после запятой, 1-10 - 3 знака, 1-100 - 2 знака, >100 - 1. Массивы данных большие (раз в 10-20 больше чем в примере), и править в ручную трудоемко и затратно по времени. Возможно ли делать это при помощи макросов?
К сообщению приложен файл: qwert.xlsx (17.0 Kb)
 
Ответить
СообщениеЗдравствуйте!
В книгу вставляется массив числовых значений, которые необходимо округлять или уменьшить разрядность по правилу: если значение меньше 1, то до 4 знака после запятой, 1-10 - 3 знака, 1-100 - 2 знака, >100 - 1. Массивы данных большие (раз в 10-20 больше чем в примере), и править в ручную трудоемко и затратно по времени. Возможно ли делать это при помощи макросов?

Автор - al-shadow
Дата добавления - 21.07.2015 в 12:06
AlexM Дата: Вторник, 21.07.2015, 12:15 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4505
Репутация: 1127 ±
Замечаний: 0% ±

Excel 2003
Код
=ОКРУГЛ(B6;ВПР(ABS(B6);{0;4:1;3:10;2:100;1};2))
и
Код
=ТЕКСТ(B6;"0,"&ПОВТОР(0;ВПР(ABS(B6);{0;4:1;3:10;2:100;1};2)))

PS. Почему-то тема переехала в другой раздел форума. :(
К сообщению приложен файл: qwert_1.xls (43.0 Kb) · qwert_2.xls (45.0 Kb)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.


Сообщение отредактировал AlexM - Вторник, 21.07.2015, 12:33
 
Ответить
Сообщение
Код
=ОКРУГЛ(B6;ВПР(ABS(B6);{0;4:1;3:10;2:100;1};2))
и
Код
=ТЕКСТ(B6;"0,"&ПОВТОР(0;ВПР(ABS(B6);{0;4:1;3:10;2:100;1};2)))

PS. Почему-то тема переехала в другой раздел форума. :(

Автор - AlexM
Дата добавления - 21.07.2015 в 12:15
al-shadow Дата: Вторник, 21.07.2015, 13:28 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
AlexM, спасибо за столь быстрый ответ. Нечто подобное я делал. Сейчас стоит задача не создавать новую область данных, а править исходную, так как возможна правка исходных данных (например удаление столбцов, строк, перенос ячеек). При такой правке у меня сбивались все формулы и приходилось их исправлять. К тому же под одним массивом идет второй, за ним третий и т.д. Есть ли возможность править исходный массив?
 
Ответить
СообщениеAlexM, спасибо за столь быстрый ответ. Нечто подобное я делал. Сейчас стоит задача не создавать новую область данных, а править исходную, так как возможна правка исходных данных (например удаление столбцов, строк, перенос ячеек). При такой правке у меня сбивались все формулы и приходилось их исправлять. К тому же под одним массивом идет второй, за ним третий и т.д. Есть ли возможность править исходный массив?

Автор - al-shadow
Дата добавления - 21.07.2015 в 13:28
Udik Дата: Вторник, 21.07.2015, 14:04 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
именно такие границы?
1-10 - 3 знака, 1-100 - 2 знака

помимо этого сейчас у вас количество знаков в ячейке будет плавать - то 5, то 6.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Вторник, 21.07.2015, 14:06
 
Ответить
Сообщениеименно такие границы?
1-10 - 3 знака, 1-100 - 2 знака

помимо этого сейчас у вас количество знаков в ячейке будет плавать - то 5, то 6.

Автор - Udik
Дата добавления - 21.07.2015 в 14:04
nilem Дата: Вторник, 21.07.2015, 14:06 | Сообщение № 5
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
al-shadow, нужно именно округлить или нужно уменьшить разряность, отображаемую на экране?


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

Сообщение отредактировал nilem - Вторник, 21.07.2015, 14:07
 
Ответить
Сообщениеal-shadow, нужно именно округлить или нужно уменьшить разряность, отображаемую на экране?

Автор - nilem
Дата добавления - 21.07.2015 в 14:06
KSV Дата: Вторник, 21.07.2015, 14:10 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Добрый день!
Так?[vba]
Код
Sub test()
     Dim i&, n&, r&, c&, v()
     v = ActiveCell.CurrentRegion.Value
     i = UBound(v, 2)
     For r = 1 To UBound(v)
         For c = 1 To i
             If Not IsEmpty(v(r, c)) And IsNumeric(v(r, c)) Then
                 Select Case Abs(v(r, c))
                     Case Is >= 100: n = 1
                     Case Is >= 10:  n = 2
                     Case Is >= 1:   n = 3
                     Case Else:      n = 4
                 End Select
                 v(r, c) = Round(v(r, c), n)
             End If
     Next c, r
     ActiveCell.CurrentRegion.Value = v
End Sub
[/vba]
К сообщению приложен файл: qwert.xlsm (19.9 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
СообщениеДобрый день!
Так?[vba]
Код
Sub test()
     Dim i&, n&, r&, c&, v()
     v = ActiveCell.CurrentRegion.Value
     i = UBound(v, 2)
     For r = 1 To UBound(v)
         For c = 1 To i
             If Not IsEmpty(v(r, c)) And IsNumeric(v(r, c)) Then
                 Select Case Abs(v(r, c))
                     Case Is >= 100: n = 1
                     Case Is >= 10:  n = 2
                     Case Is >= 1:   n = 3
                     Case Else:      n = 4
                 End Select
                 v(r, c) = Round(v(r, c), n)
             End If
     Next c, r
     ActiveCell.CurrentRegion.Value = v
End Sub
[/vba]

Автор - KSV
Дата добавления - 21.07.2015 в 14:10
al-shadow Дата: Вторник, 21.07.2015, 14:47 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Udik, у меня опечатка. 1-10 - знака, 10-100 - 2
nilem, изначально считал, что не принципиально. Сейчас понял, что лучше именно изменение разрядности.
KSV, спасибо. попробовал работает. Я правильно понимаю, что макрос округляет? Можно ли сделать не округление, а изменение разрядности. Если последняя цифра 0, то она не отображается. Сначала я не точно сформулировал задачу. Мне важно именно отображение определенного количества знаков в зависимости от значения числа.
 
Ответить
СообщениеUdik, у меня опечатка. 1-10 - знака, 10-100 - 2
nilem, изначально считал, что не принципиально. Сейчас понял, что лучше именно изменение разрядности.
KSV, спасибо. попробовал работает. Я правильно понимаю, что макрос округляет? Можно ли сделать не округление, а изменение разрядности. Если последняя цифра 0, то она не отображается. Сначала я не точно сформулировал задачу. Мне важно именно отображение определенного количества знаков в зависимости от значения числа.

Автор - al-shadow
Дата добавления - 21.07.2015 в 14:47
_Boroda_ Дата: Вторник, 21.07.2015, 15:09 | Сообщение № 8
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Сейчас понял, что лучше именно изменение разрядности

Тогда удобно условным форматированием (для 2003 с младших версий этот способ работать не будет, но, если нужно, можно попробовать поизвращаться)
К сообщению приложен файл: qwert_1.xlsx (11.9 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Сейчас понял, что лучше именно изменение разрядности

Тогда удобно условным форматированием (для 2003 с младших версий этот способ работать не будет, но, если нужно, можно попробовать поизвращаться)

Автор - _Boroda_
Дата добавления - 21.07.2015 в 15:09
Udik Дата: Вторник, 21.07.2015, 16:46 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
вот набросал макрос, который форматирует выделенную область

[vba]
Код


Public Sub test()
Dim arrStr(1 To 4) As String
Dim i As Integer, j As Integer
arrStr(1) = "0,0000"
arrStr(2) = "0,000"
arrStr(3) = "0,00"
arrStr(4) = "0,0"

delI = ActiveCell.Row   
delJ = ActiveCell.Column   

rowNum = Selection.Rows.Count - 1
colNum = Selection.Columns.Count - 1

For i = delI To rowNum + delI
        For j = delJ To colNum + delJ
            If IsNumeric(Cells(i, j).Value) Then
            Select Case Cells(i, j).Value
                Case Is > 100
                    Cells(i, j).NumberFormatLocal = arrStr(4)
                Case Is > 10
                    Cells(i, j).NumberFormatLocal = arrStr(3)
                Case Is > 1
                    Cells(i, j).NumberFormatLocal = arrStr(2)
                Case Else
                    Cells(i, j).NumberFormatLocal = arrStr(1)
            End Select
            End If

        Next j
Next i

End Sub

,
[/vba]
К сообщению приложен файл: elitA1.xlsm (19.4 Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Вторник, 21.07.2015, 17:43
 
Ответить
Сообщениевот набросал макрос, который форматирует выделенную область

[vba]
Код


Public Sub test()
Dim arrStr(1 To 4) As String
Dim i As Integer, j As Integer
arrStr(1) = "0,0000"
arrStr(2) = "0,000"
arrStr(3) = "0,00"
arrStr(4) = "0,0"

delI = ActiveCell.Row   
delJ = ActiveCell.Column   

rowNum = Selection.Rows.Count - 1
colNum = Selection.Columns.Count - 1

For i = delI To rowNum + delI
        For j = delJ To colNum + delJ
            If IsNumeric(Cells(i, j).Value) Then
            Select Case Cells(i, j).Value
                Case Is > 100
                    Cells(i, j).NumberFormatLocal = arrStr(4)
                Case Is > 10
                    Cells(i, j).NumberFormatLocal = arrStr(3)
                Case Is > 1
                    Cells(i, j).NumberFormatLocal = arrStr(2)
                Case Else
                    Cells(i, j).NumberFormatLocal = arrStr(1)
            End Select
            End If

        Next j
Next i

End Sub

,
[/vba]

Автор - Udik
Дата добавления - 21.07.2015 в 16:46
KSV Дата: Вторник, 21.07.2015, 17:42 | Сообщение № 10
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Мне важно именно отображение определенного количества знаков в зависимости от значения числа.

Тогда удобно условным форматированием

Абсолютно согласен с Александром. Зачем применять макросы там, где вполне можно обойтись и без них?!


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение
Мне важно именно отображение определенного количества знаков в зависимости от значения числа.

Тогда удобно условным форматированием

Абсолютно согласен с Александром. Зачем применять макросы там, где вполне можно обойтись и без них?!

Автор - KSV
Дата добавления - 21.07.2015 в 17:42
Мир MS Excel » Вопросы и решения » Вопросы по VBA » округление с учетом значения числа (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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