在Excel VBA中剥离大写单词

时间:2009-08-04 14:44:35

标签: excel-vba split parsing vba excel

在Excel VBA中删除大写单词

我有一张像这样的Excel表格:

A        B
1        Used CONTENT VERSION SYSTEM for the FALCON Project
2        USA beats UK at Soccer Cup 2008
3        DARPA NET’s biggest contribution was the internet
4        One big problem is STRUCTURED QUERY LANGUAGE queries on non-normalized data

我想提取大写中的所有单词并使用它们生成一个列表:

A                             B
CONTENT VERSION SYSTEM        1
FALCON                        1
USA                           2
UK                            2
DARPA NET                     3
STRUCTURED QUERY LANGUAGE     4

我在想我可以检查“eachWord”== UCase(eachWord),但我不知道如何处理短语。我也不知道如何处理以“撇号”,“末端括号”或标点符号结尾的短语。

我一直在分裂这样的话: IndividualWordsArray = Split(ActiveSheet.Cells(workingRow, 2).Value)

但这只是基于空间字符的数组。我认为如果除了空格之外,它还可以通过这些字符分开:“():',. ? ! ;经过一些搜索,我发现我可以通过除空格之外的字符分割一行,但一次只能分隔一个分隔符。

任何人都知道如何创建一个包含所有大写单词和短语的列表?

2 个答案:

答案 0 :(得分:1)

一种简单的方法是获取文本的副本,用空格字符替换所有分隔符,然后使用空格作为分隔符进行拆分。

答案 1 :(得分:0)

这是一种丑陋的慢速方式,但它确实有效(除了它不会从NET返回NET)。我只是遍历单词数组并测试每个字母的大写字母。 Option Compare Binary声明至关重要。

Option Explicit
Option Compare Binary

Sub x()
    Dim IndividualWordsArray() As String, keeperArray() As String
    Dim i As Integer, j As Integer, k As Integer
    Dim allCaps As Boolean

    IndividualWordsArray = Split(ActiveCell)
    k = 0
    For i = 0 To UBound(IndividualWordsArray)
        allCaps = True
        For j = 1 To Len(IndividualWordsArray(i))
            If Not Mid(IndividualWordsArray(i), j, 1) Like "[A-Z]" Then
                allCaps = False
                Exit For
            End If
        Next j
        If allCaps Then
            ReDim Preserve keeperArray(k)
            keeperArray(k) = IndividualWordsArray(i)
            Debug.Print keeperArray(k)
            k = k + 1
        End If
    Next i
End Sub