Получить в столбце B слова из столбца A, которых нет в словаре - PullRequest
1 голос
/ 02 сентября 2010

Как я могу создать макрос, который будет проверять каждую ячейку столбца A, находить слова, которых нет в определенном словаре, и записывать их (разделенные пробелом) в следующую ячейку.На рисунке ниже вы можете увидеть пример рабочего листа после завершения макроса.

alt text

Идея заключалась в том, чтобы получить столбец (varchar) из базы данных и использовать Excelпроверить это по буквам.Следующим шагом будет отправка электронного письма ответственному пользователю, содержащего строки, которые содержат хотя бы одно слово в столбце B (вместе с идентификатором столбца, конечно).Я думаю, что я мог бы сделать остальную часть работы, кроме этого шага получения ошибочных слов.Если вы можете придумать еще одну идею для проверки орфографии в колонке БД, я был бы признателен, если бы вы поделились ею со мной.Спасибо.

Ответы [ 2 ]

3 голосов
/ 15 сентября 2010

Вы можете использовать VBA для вызова встроенного словаря Office, используя Application.CheckSpelling

Это синтаксис:

Функция CheckSpelling ( Слово как строка , [ CustomDictionary ], [ IgnoreUppercase ]) Как логическое значение

... и вот пример, который соответствует вашим требованиям:

Option Explicit

Public Sub Checker()

Dim s           As Variant
Dim sArray      As Variant
Dim lCurrRow    As Long
Dim lStartRow   As Long
Dim lEndRow     As Long

lStartRow = 1
lEndRow = 5

Application.ScreenUpdating = False

With ThisWorkbook.Worksheets(1)
    'Clear existing data in Column B
    Call .Columns(2).ClearContents

    For lCurrRow = lStartRow To lEndRow

        'Populate an Array, splitting the song title at the spaces
        sArray = Split(.Cells(lCurrRow, 1).Text, " ")

        'Loop through each word in the Array
        For Each s In sArray
            'Spell Check against the main MS Office dictionary
            If Not Application.CheckSpelling(s) Then
                'this word is missing, output to Column B:
                .Cells(lCurrRow, 2).Value = Trim(.Cells(lCurrRow, 2).Value & " " & s)
            End If
        Next s

    Next lCurrRow
End With

Application.ScreenUpdating = True

End Sub
2 голосов
/ 02 сентября 2010

Не делай этого

Это безумная идея. Excel не правильный инструмент для этого.

Сказав это, это может быть выполнимо.

  • Сначала вам придется разбить «предложения» на слова. Это можно сделать с помощью VBA на отдельном листе.
  • Затем вы можете проверить, существует ли каждое слово, используя COUNTIF или VLOOKUP. Например, если у вас есть лист с именем dictionary, содержащий все действительные слова в алфавитном порядке (в первом столбце), наиболее эффективным способом будет =IF(VLOOKUP(B2;dictionary!A:A;1)<>B2;B2;"") для слова в B2.
  • Затем вы можете объединить результирующие ячейки для каждого предложения или просто найти первую (снова используя VLOOKUP, теперь с дополнительным аргументом FALSE).

Но ... просто забудь!

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