0

我有一张有这么多行的表。它的结构如下图:

在此处输入图像描述

如您所见,我在 A 列中的名称之间有“或”、“与”。我如何将这些列分成两部分?在这种情况下,第一列将有 David、Tylor、Fred、Jessi、Roland,第二列有 Peter、Mark、Alfered、Hovard 和 DAvid。

注意:请注意第 2 行和第 5 行。在这些行中,我有 2 个“或”或两个“与”。

编辑:我更喜欢在 Excel 中执行此操作

我试过的

作为一种可能的解决方案,我在 vba 中有这个功能。

Function udfRegEx(CellLocation As Range, RegPattern As String)

Dim RegEx As Object, RegMatchCollection As Object, RegMatch As Object
Dim OutPutStr As String
Dim i As Integer

i = ActiveWorkbook.Worksheets(ActiveWorksheet.Name).UsedRange.rows.Count
    Set RegEx = CreateObject("vbscript.regexp")
    With RegEx
        .Global = True
        .Pattern = RegPattern
    End With

        OutPutStr = ""
        Set RegMatchCollection = RegEx.Execute(CellLocation.Value)
        For Each RegMatch In RegMatchCollection
            OutPutStr = OutPutStr & RegMatch
        Next
        udfRegEx = OutPutStr

    Set RegMatchCollection = Nothing
    Set RegEx = Nothing
    Set Myrange = Nothing

End Function

此函数使用正则表达式。但我不知道如何使用它。

4

3 回答 3

2

正如我提到的,您不需要 VBA。Excel 公式也可以满足您的需求。

我的假设

  1. Col A 有数据
  2. 您想要 Col B 和 Col C 中的输出

将此公式粘贴到单元格 B1 中并将其复制下来

=IF(ISERROR(SEARCH(" or ",A1,1))=TRUE,IF(ISERROR(SEARCH(" and ",A1,1))=TRUE,"",LEFT(A1,SEARCH(" and ",A1,1))),LEFT(A1,SEARCH(" or ",A1,1)))

这在单元格 C1 中并将其复制下来

=IF(ISERROR(SEARCH(" or ",A1,1))=TRUE,IF(ISERROR(SEARCH(" and ",A1,1))=TRUE,"",MID(A1,SEARCH(" and ",A1,1)+5,LEN(A1)-SEARCH(" and ",A1,1))),MID(A1,SEARCH(" or ",A1,1)+4,LEN(A1)-SEARCH(" or ",A1,1)))

快照

在此处输入图像描述

于 2012-08-30T16:14:51.680 回答
1
(\w)+(( or | and ){0,1}(\w)+)*
于 2012-08-30T15:44:06.197 回答
1

它不是编码解决方案,但由于您没有要求代码(并且因为在这种情况下没有必要),只需对单词“and”和“or”进行查找/替换以用一些分隔符替换它们(例如替换他们用逗号)。然后在 excel 中,您可以选择数据,并使用 excel 的“文本到列”功能(在 excel 2007 中的数据选项卡上)将它们分成不同的列。

于 2012-08-30T15:44:35.990 回答