Извлечение заглавных слов в Excel - PullRequest
0 голосов
/ 05 сентября 2018

У меня 167 ячеек, и в каждой ячейке есть строка текста, где в каждой ячейке есть слово, которое написано заглавными буквами, и мне нужно скопировать только это слово в новую ячейку. Я пробовал формулу EXACT, но она только определяет, есть ли в тексте заглавное слово, и возвращает «true» или «false».

Exemple:

A1: Быстрая коричневая лиса перепрыгивает через ленивую собаку

и результат должен быть:

B1: JUMPS

Ответы [ 2 ]

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

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

Option Explicit
Public Sub TEST()
    Dim tests(), i As Long
    tests = Array("The lazy LAD was sorry for the debacle", "She wept as her FLAXEN hair tumbled down the parapet")

    For i = LBound(tests) To UBound(tests)
        Debug.Print GetString(tests(i))
    Next
End Sub

Public Function GetString(ByVal inputString As String) As String
    With CreateObject("VBScript.RegExp")
        .Global = True
        .MultiLine = True
        .Pattern = "\b[A-Z]+\b"
        If .TEST(inputString) Then
            If len(.Execute(inputString)(0)) > 1 Then
                GetString = .Execute(inputString)(0)
                Exit Function
            End If     
        End If
        GetString = vbNullString
    End With
End Function

Regex:

Попробуйте здесь .

\b утверждение позиции на границе слова (^\w|\w$|\W\w|\w\W)

Соответствует одному символу, представленному в списке ниже [A-Z]+

+ Квантификатор - Сопоставляется от одного до неограниченного количества раз, столько раз, сколько возможно, возвращая при необходимости (жадный)

A-Z один символ в диапазоне между A (индекс 65) и Z (индекс 90) (с учетом регистра)

\b утверждение позиции на границе слова (^\w|\w$|\W\w|\w\W)


В листе:

enter image description here

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

Попробуйте следующую пользовательскую функцию:

Public Function grabber(s As String) As String
    grabber = ""
    arry = Split(s, " ")
    For Each a In arry
        If a = UCase(a) Then
            grabber = a
            Exit Function
        End If
    Next a
End Function

Извлечет первое заглавное слово в ячейке.

enter image description here

Пользовательские функции (UDF) очень просто установить и использовать:

  1. ALT-F11 открывает окно VBE
  2. ALT-I ALT-M открывает новый модуль
  3. вставьте материал и закройте окно VBE

Если вы сохраните книгу, UDF будет сохранен вместе с ней. Если вы используете версию Excel позже, чем 2003, вы должны сохранить файл в формате .xlsm, а не .xlsx

К Удалить UDF:

  1. вызвать окно VBE, как указано выше
  2. очистить код
  3. закрыть окно VBE

Для используйте UDF из Excel:

* 1 042 * = MyFunction (А1)

Чтобы узнать больше о макросах в целом, см .:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

* * И тысяча сорок-девять

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

и подробности о UDF см .:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

Для работы должны быть включены макросы!

(этот код можно легко изменить, чтобы извлечь все заглавные слова из предложения)

...