Автор Тема: Word VBA Макросы: Как заменить повторяющиеся числовые значение на случайные из заданного диапазона?  (Прочитано 266 раз)

Оффлайн kypimozg

  • Посетитель форума
  • Сообщений: 3
В тексте одно и то же число записано несколько раз. Нужно заменить все вхождения этого числа на случайные числа из заданного диапазона.

Например, в тексте 80 раз используется число 9.02, а мне нужно что бы оно каждый раз менялось на случайное число из диапазона 3.00-11.00.

[вложение удалено администратором]

Онлайн Администратор

  • Administrator
  • Сообщений: 1637
В пункте 3, вместо 9.02 укажите нужное число.
В пункте 5.1.a вместо чисел 3 и 11 подставляйте нужные числа.

Макрос
Sub Макрос()
   
    Dim find_rng As Range, find As find
    Dim NewNumber
   
   
    '1. Отключение монитора. Может это ускорит макрос.
    Application.ScreenUpdating = False
   
    '2. Создание объектов для поиска.
    Set find_rng = ActiveDocument.Range(0, 0)
    Set find = find_rng.find
   
    '3. Настройка поиска.
    find.Text = "<9.02>"
    find.MatchWildcards = True
    find.Wrap = wdFindStop
   
    '4. Настройка функции Rnd, чтобы при каждом запуске макроса генерировались новые последовательности чисел.
    Randomize
   
    '5. Поиск и замена.
    Do While find.Execute = True
   
        '1) Создание нового числа.
        'a) Создаём случайное дробное число в заданном диапазоне.
        NewNumber = (11 - 3) * Rnd + 3
        'b) Округление числа до двух цифр после запятой.
        NewNumber = Format(NewNumber, "0.00")
        'c) Замена запятой на точку.
        NewNumber = Replace(NewNumber, ",", ".")
       
        '2) Замена найденного фрагмента на новое число.
        find_rng.Text = NewNumber
       
        '3) Смещение невидимого курсора вправо от найденного фрагмента, чтобы поиск
            ' начался после найденного фрагмента, а не в найденном фрагменте.
        find_rng.Collapse Direction:=wdCollapseEnd
       
    Loop
   
    '6. Включение монитора.
    Application.ScreenUpdating = True
   
    '7. Сообщение.
    MsgBox "Готово.", vbInformation

End Sub

Оффлайн kypimozg

  • Посетитель форума
  • Сообщений: 3
В макросе, в пункте 5.1.a целые числа. А как быть если диапазон дробный 0.12-0.36?

Онлайн Администратор

  • Administrator
  • Сообщений: 1637
'a) Создаём случайное дробное число в заданном диапазоне.
NewNumber = (0.36 - 0.12) * Rnd + 0.12

Оффлайн kypimozg

  • Посетитель форума
  • Сообщений: 3
Спасибо большое, получилось идеально!