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

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

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

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

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

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

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

Scio me nihil scire

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

как округлить в том же столбце без макроса, не знаю,
а макрос щас попробую изобрАзить
...
Рейтинг: 0 / 0
30.07.2004, 14:30
    #32629509
Yanis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel, round
YanisФормат ячейки не предлагать - должны измениться значения ячеек, а не их представление на экране
...
Рейтинг: 0 / 0
30.07.2004, 14:31
    #32629513
Yanis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel, round
Похоже, придется написать процедурку с цикликом?
...
Рейтинг: 0 / 0
30.07.2004, 14:33
    #32629516
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel, round
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
30.07.2004, 14:41
    #32629549
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel, round
2 Yanis

в диапазоне для округлени - числа или формулы?
...
Рейтинг: 0 / 0
30.07.2004, 14:46
    #32629572
Yanis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel, round
Числа, результаты формул округлять не требуется
...
Рейтинг: 0 / 0
30.07.2004, 14:47
    #32629574
Yanis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel, round
И они должны остаться числами
...
Рейтинг: 0 / 0
30.07.2004, 14:53
    #32629584
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel, round
вот макрос.
Использовать так
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
30.07.2004, 14:54
    #32629587
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel, round
какая-то проблема - не мог зпостить пару минут - а потомкак начали отщелкивать...

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

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

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

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

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

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
02.08.2004, 07:58
    #32630767
Yanis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel, round
Улучшения в целом хороши, не спорю. Нет вопросов по 2, 3, 4, 5 предложениям.

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

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


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