Статьи из блога

Статьи из блога

Операции округления для выделенного числа

Рубрика: Вопрос-Ответ, Макросы
Метки: |
Воскресенье, 25 января 2009 г.
Просмотров: 8348
Подписаться на комментарии по RSS
Версия для печати

[Ссылки на статью]

Павел задал вопрос:

Как выделенное число в ворде можно умножить на 1,5 и округлить до ближайшего кратного 50-ти? Например: имеем число 44560, после умножения на 1,5 получаем 66840, а нам его надо округлить до 66850 и записать вместо изначального числа.

Этот вопрос был опубликован в рассылке и два специалиста ответили Павлу.

Александр предложил такой макрос:

Sub FiftyRounding()
' Работает как для положительных, так и для отрицательных чисел
' в пределах типа Double
Dim TwoLast As Integer
Dim Num As Double
On Error GoTo WrongNumber ' На случай, если выделено не число.
' Умножаем выделенное число, выбрасываем дробную часть:
Num = Int(CDbl(Selection.Text) * 1.5)
' Извлекаем число, состоящее из двух последних цифр:
TwoLast = Abs(Num - Sgn(Num) * Int(Abs(Num) / 100) * 100)
' Округляем в зависимости от значения двузначного числа:
Select Case TwoLast
    Case 0 To 24: Num = Num - Sgn(Num) * TwoLast
    Case 25: Num = Num - TwoLast + 50
    Case 26 To 74: Num = Num - Sgn(Num) * (TwoLast - 50)
    Case 75: Num = Num - TwoLast + 100
    Case 76 To 99: Num = Num - Sgn(Num) * (TwoLast - 100)
End Select
Selection.Text = CStr(Num) ' Возвращаем результат в Word.
WrongNumber:
    If Err.Number = 13 Then
        MsgBox "Выделенный фрагмент не является числом"
    End If
End Sub

Леонид Бродский предложил другой вариант макроса с функцией:

Sub Round50()
    Selection.Range.Text = RoundX(Selection.Range.Text, 50)
End Sub
 
Public Function RoundX(numberToRound As Double, roundBase As Integer)
    RoundX = Round(numberToRound / roundBase, 0) * roundBase
End Function

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us

Еще записи по вопросам использования Microsoft Word:

Комментариев: 2

  1. Леонид Бродский
    16.02.2009 в 12:32 | #1

    Функция RoundX годится для округления по любому основанию, например 0.05, 5, 10. Обработка ошибок из предыдущего варианта здесь тоже не помешает.

  2. Павел
    28.04.2009 в 11:37 | #2

    День добрый. Совпадение я тоже Павел :) и похожая задача стояла передо мной, тока я ее сначала решил а потом наткнулся на ваш сайт.

    Для своих нужд я состряпал вот такой скриптик.

    У меня в ворде регулярно бывает до десятка прайс-листов. Цены записаны в таком вот виде: 34,320.00

    Надо тоже умножать на 15% и округлять в большую сторону до кратного 50-ти.

    Вот скрипт:

    Sub Увеличение15()
        Dim res As Double, a, b As Currency, s As String
        s = Selection.Text
        s = Replace(s, ",", "") 'убираем запятую из числа
        b = Val(s)
        a = b * 1.15
        If (a / 50 - Fix(a / 50)) = 0 Then
            res = Fix(a / 50) * 50
        Else
            res = (Fix(a / 50) + 1) * 50
        End If
      
        s = CStr(res) + ".00"
     
        Selection.TypeText Text:=s
    End Sub

Оставьте комментарий!

(обязательно)

^ Наверх