powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel, round
20 сообщений из 20, страница 1 из 1
Excel, round
    #32629323
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется масса ячеек, в которых храняться числа с большим колвом знаков после запятой.
Задача:
округлить эти значения (например, до целых), желательно в несколько кликов мыши и стандартными средствами интерфейса.
Формат ячейки не предлагать - должны измениться значения ячеек, а не их представление на экране
...
Рейтинг: 0 / 0
Excel, round
    #32629343
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точность как на экране подойдет ?
...
Рейтинг: 0 / 0
Excel, round
    #32629398
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно подойдет - она ведь легко устанавливается форматом ячейки
...
Рейтинг: 0 / 0
Excel, round
    #32629403
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YanisИмеется масса ячеек, в которых храняться числа с большим колвом знаков после запятой.
Задача:
округлить эти значения (например, до целых), желательно в несколько кликов мыши и стандартными средствами интерфейса.
Формат ячейки не предлагать - должны измениться значения ячеек, а не их представление на экране

функции округления в Екселе:

ОКРВВЕРХ
ОКРВНИЗ
ОКРУГЛ
ОКРУГЛВВЕРХ
ОКРУГЛВНИЗ

Как вставить
Пусть у тебя числа для округления в столбце, тогда
1) в соседнем столбце выделяешь область по размеру округляемого диапазона.
2) жмешь вставка -> функция -> категория: математические выбираешь любимую или нужную по месту ф-цию, например, ОКРУГЛ
3)переместив курсор в поле число , мышью выделяешь диапазон чисел для округления
4) перемещаеш курсор в поле число разрядов и набираешь там 0 (ноль)
5) нажимаешь CTRL-Enter
----------------------------------
6) любуешся результатом.
----------------------------------
...
Рейтинг: 0 / 0
Excel, round
    #32629466
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за подсказку, я ступил встроенной функцией воспользоваться. И все-таки это не совсем то.
Таблица большая (статистическая), и ее авторы там намакросили дофига.

В общем, желательно делать не так:
1. Скопировать диапазон ячеек на новый лист
2. ROUND()
3. Вклеить результат (Paste special -> Values) откуда взяли

А округлять ячейки волшебным образом "на месте", прямо в неокругленных ячейках
...
Рейтинг: 0 / 0
Excel, round
    #32629491
Фотография Jojo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я тут рекордер запустил
посмотрел чё пишет

Sub Макрос1()
Range("D8:E10").Select
Selection.NumberFormat = "0.00"
Range("E8").Select
End Sub

Scio me nihil scire

<<Jojo®>>
...
Рейтинг: 0 / 0
Excel, round
    #32629506
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не предлагал НИЧЕГО копировать
я предлагал округлять в СОСЕДНЕМ столбце.

как округлить в том же столбце без макроса, не знаю,
а макрос щас попробую изобрАзить
...
Рейтинг: 0 / 0
Excel, round
    #32629509
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YanisФормат ячейки не предлагать - должны измениться значения ячеек, а не их представление на экране
...
Рейтинг: 0 / 0
Excel, round
    #32629513
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, придется написать процедурку с цикликом?
...
Рейтинг: 0 / 0
Excel, round
    #32629516
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jojoя тут рекордер запустил
посмотрел чё пишет

Sub Макрос1()
Range("D8:E10").Select
Selection.NumberFormat = "0.00"
Range("E8").Select
End Sub

Scio me nihil scire

<<Jojo®>>

Если попросить сумму от диапазона D8:E10, отобразить ее с форматом 0.00,
то в общем случае отображенное число не совпадет с суммой округленных значений.
...
Рейтинг: 0 / 0
Excel, round
    #32629549
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Yanis

в диапазоне для округлени - числа или формулы?
...
Рейтинг: 0 / 0
Excel, round
    #32629572
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Числа, результаты формул округлять не требуется
...
Рейтинг: 0 / 0
Excel, round
    #32629574
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И они должны остаться числами
...
Рейтинг: 0 / 0
Excel, round
    #32629584
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот макрос.
Использовать так
1) мышью выделть диапазон для округления
2) запустить макрос


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Sub Макрос3()
 '
 
 ' Макрос3 Макрос
 
 ' Макрос записан 30.07.2004 (viktord)
 
 '
 

 '
 
    Dim tRange As Range
    Dim v
    
    Set tRange = Selection
    v = tRange.FormulaLocal
    
    Dim lastRow As Long, lastCol As Long
    Dim i As Long, j As Long
    
    lastRow = UBound(v,  1 )
    lastCol = UBound(v,  2 )
    For i =  1  To lastRow
      For j =  1  To lastCol
        v(i, j) = Application.WorksheetFunction.Round(v(i, j),  0 )
      Next j
    Next i
    tRange.FormulaLocal = v
    
End Sub

Умнее, может что и получится, а пока,
Так сойдет?
...
Рейтинг: 0 / 0
Excel, round
    #32629587
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какая-то проблема - не мог зпостить пару минут - а потомкак начали отщелкивать...

мдераторам - если можно - уберите лишнее...
...
Рейтинг: 0 / 0
Excel, round
    #32629761
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сойдет. Юзер доволен, спасибо за код, который мне не пришлось писать :)
...
Рейтинг: 0 / 0
Excel, round
    #32629854
Фотография Stepler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YanisСойдет. Юзер доволен, спасибо за код, который мне не пришлось писать :)
Халява, плз !!!

Могет и мине задать вопрос и уйти обедать, за енто время кто-нибудь кода запишет...
...
Рейтинг: 0 / 0
Excel, round
    #32629872
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stepler YanisСойдет. Юзер доволен, спасибо за код, который мне не пришлось писать :)
Халява, плз !!!

Могет и мине задать вопрос и уйти обедать, за енто время кто-нибудь кода запишет...
Тогда форум будет состоять только из вопросов без ответов, потому что никто не захочет ничего писать.
Зато вопросов будет куча
...
Рейтинг: 0 / 0
Excel, round
    #32630423
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не слышно критики, а жаль...

Вот решил указать на несколько возможных "улучшайзингов".
(Улучшить что-то кардинально - переформулировать задачу - не смог - сдаюсь).

Постараюсь перечислить в порядке убывания "важности", на свой взгляд.

1) On Error Resum Next - это для порядка

2) Set tRange = Selection.SpecialCells(xlConstants,xlNumbers)
это позволит работать с произвольным выделением,
округляя только числа и пропуская пустые клетки, формули и строки.

3) можно в макросе запросить точность округления, тогда один и тот же макрос можно использовать для разных округлений.

lngDecPlaces = VBA.InputBox("Знаков после запятой:", "Точность округления", 0)

4) Для ускорения последней фазы - передачи пересчитанного массива обратно диапазону - должно быть полезно отключение перерисовки экрана и
установка режима ручного пересчета.

До передачи массива
Dim oldCalcMode As Long

Application.ScreenUpdating = False
oldCalcMode = Application.Calculation
Application.Calculation = xlCalculationManual


Перед завершением макроса
Application.Calculation = oldCalcMode
'пересчитаем измененный лист
tRange.Worksheet.Calculate ' спорное утверждение - варианты
'не пересчитывать
' пересчитать все открытые книги
Application.ScreenUpdating = True

5) Для ускорения обращения к Round полезно прокешировать объект WorksheetFunction.

Dim tF As WorksheetFunction
Set tF = Application.WorksheetFunction

тогда тело внутреннего цикла будет выглядеть так

v(i, j) = tF.Round(v(i, j), lngDecPlaces)

6) для ОЧЕНЬ больших выделений - можно попробовать пооптимизировать обращение к массиву, преобразовав его из двумерного в одномерный,
тогда сам собой исчезнет внутренний цикл. При этом придется вводить вспомогательны фукции, и , в любом случае, применять Win API.
...
Рейтинг: 0 / 0
Excel, round
    #32630767
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Улучшения в целом хороши, не спорю. Нет вопросов по 2, 3, 4, 5 предложениям.

Возражение по 1:
Не стоит везде ставить такой обработчик ошибок, по крайней мере пока в нем не возникнет нужда.

6:
Для данной задачи не требуется. Тем более юзер собирался делать все ВРУЧНУЮ :-)
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel, round
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]