Вставьте пробелы между большими числами в VBA - PullRequest
0 голосов
/ 13 сентября 2018

Мне нужен код VBA, который может добавлять интервалы в больших числах, например, у меня есть числа 8789798987978979879, и я хочу получить результат, подобный 8789 7989 8797 8979 79.

или любой код VBA, который преобразуется в части.

спасибо

1 Ответ

0 голосов
/ 13 сентября 2018

Вам не нужен VBA для этого. Это можно сделать с помощью простого подстановочного поиска и замены.

В диалоговом окне поиска и замены убедитесь, что установлен флажок подстановочного знака.

В поле «найти что» введите

'([0-9] {4,4}) ([0-9])' без ''

В поле «заменить на» введите '\ 1 \ 2' снова без ''

Нажимайте «Заменить все», пока не получите ноль замен.

Что происходит?

[0-9] означает найти любой отдельный символ в диапазоне 0-9. Диапазон символов должен быть в порядке Ascii.

{,} означает найти количество символов, непосредственно предшествующих {}, поэтому

[0-9] {4,4} означает найти не менее 4 символов в диапазоне [0-9]

() означает помнить, что вы нашли.

в поле замены \ 1 говорит, что используйте первое «найти то», которое запомнилось (\ 2 второе «найти что» и т. Д.)

так

([0-9] {4,4}) ([0-9]) применяется к 1234567890

найдет и запомнит 1234 как \ 1 и 5 как \ 2

'заменить на' из \ 1 \ 2 даст нам

1234 56789

НО, потому что за 6789 не следует число, оно не будет найдено, поэтому вам нужно повторить замену всех.

Подробнее о поиске по шаблону можно прочитать здесь

https://wordmvp.com/FAQs/General/UsingWildcards.htm

Эквивалент VBA - запускать поиск / замену в цикле, пока условие поиска больше не будет найдено.

Sub test()

    splitBigNumbers 3

End Sub

Public Sub splitBigNumbers(Optional splitAt As Long = 4)

    replaceText_ReplaceAllWithWildcardOption ActiveDocument, Replace("([0-9]{###,###})([0-9])", "###", CStr(splitAt)), "\1 \2", True

End Sub


Sub replaceText_ReplaceAllWithWildcardOption(this_document As Word.Document, findText As String, replaceText As String, Optional useWildcard = False)

Dim my_continue                                     As Boolean
    Do
        With this_document.StoryRanges(wdMainTextStory).Find
            .ClearFormatting
            .Format = False
            .Wrap = wdFindContinue
            .Text = findText
            .Replacement.Text = replaceText
            .Forward = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = useWildcard
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute Replace:=wdReplaceAll
            my_continue = .Found

        End With

    Loop While my_continue

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...