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

Подсчет количества некоторых слов в документе

Если вам нужно определить количество вхождений в документ некоторого слова, то здесь может помочь следующий макрос (навеяно заметкой Грега Макси "Count Selected Word\Phrase").

Вы выделяете некое слово и запускаете макрос, который после подсчета выдает сообщение о количестве найденных слов:

 

 

Sub CountWords()
'макрос подсчета количества определенных слов в документе
'для подсчета количества вхождений конкретного слова, это слово должно быть выделено
Dim rng As Range
Dim sWord As String
Dim i As Long
Set rng = ActiveDocument.Range
Application.ScreenUpdating = False
If Selection.Type = wdSelectionIP Then
   MsgBox "Слово не выделено", vbExclamation
Else
'удаляем знак абзаца справа от слова
   If Right(Selection.Text, 1) = Chr(13) Then
      Selection.MoveLeft wdCharacter, 1, wdExtend
   End If
   sWord = Trim(Selection.Text)  'Убираем прообелы вокруг слова и запоминаем
   Selection.Collapse wdCollapseStart
   With rng.Find
      .ClearFormatting
      .Replacement.ClearFormatting
      .Text = sWord
      .Forward = True
      .MatchWholeWord = True
      .MatchWildcards = False
      .Wrap = wdFindStop
      Do While .Execute
         i = i + 1
      Loop
   End With
   Select Case i
      Case 2 To 4
         MsgBox "Слово " & Chr(171) & sWord & Chr(187) & " встречается в документе " & i & " раза", _
            vbInformation, "Подсчет слов"
      Case 1
         MsgBox "Слово " & Chr(171) & sWord & Chr(187) & " встречается в документе " & i & " раз", _
            vbInformation, "Подсчет слов"
      Case Else
         MsgBox "Слово " & Chr(171) & sWord & Chr(187) & " встречается в документе " & i & " раз", _
            vbInformation, "Подсчет слов"
   End Select
   rng.Find.Text = ""
End If
Application.ScreenUpdating = True
End Sub

Если вы не знаете, как подключить к документу и применить этот макрос, изучите следующие заметки с сайта:

Создание макроса из готового кода

Автоматическая запись макроса

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:

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

  1. Luna
    17.06.2009 в 21:03 | #1

    Ха!

    Есть вариант получше - и без макроса!

    Ctrl+F, птичку на "Выделить все фрагменты, найденные в", выбрать Основной документ, и кнопку Найти все.

    В итоге получится не только количество элементов, и _все_ они будут выделены!

    Причем не обязательно отдельные слова, но и их фрагменты

  2. 18.06.2009 в 04:07 | #2

    Luna, безусловно! Спасибо.

  3. Iwan Petrov
    27.06.2009 в 20:52 | #3

    А в Worde 2007 есть "Выделить все фрагменты, найденные в"?

  4. 27.06.2009 в 20:58 | #4

    Есть. Там отдельная кнопка - "Выделение при чтении" с двумя командами: Выделить все и Снять выделение.

  5. Executor
    09.07.2009 в 17:44 | #5

    Luna, макрос для того и создан чтобы не делать миллион кликов.

  6. Аноним
    06.02.2014 в 23:00 | #6

    С одним словом понятно. А допустим, если пять слов и не выделеных, а просто Вася 10раз Клава15раз...

  7. Amadeus
    01.07.2014 в 15:08 | #7

    Одна беда - если слово встретится 22 раза то на выводе будет "22 раз". Нужно отсекать еденицы перед выбором.

  8. Ксения
    19.01.2019 в 05:15 | #8

    Здравствуйте, не знаю, жива ли еще тема, но всё же попробую. Подскажите, возможно ли как-то средствами Word создать окошко, в котором будет пеленговаться не только количество найденных слов, но и на каких страницах в тексте эти слова находятся?

  9. Akahige
    17.08.2021 в 19:02 | #9

    Для подсчета отдельных слов этот макрос реально лучше, чем упоминаемый макрос Грега Макси. У Макси, как выяснилось, макрос считает и отдельное слово и "слово в слове". Пример: если в документе 3 раза встречается "папа" и 2 - "папазол", макрос Макси (TextCountQuick) выдаст, что "папа" встречается 5 раз - он засчитает часть слова "папазол" как "папа". А данный макрос (CountWords) такую ошибку мне не выдает. Автору респект и спасибо!!!

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

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

^ Наверх