Regex 拆分一个表';根据值将列分为两列

Regex 拆分一个表';根据值将列分为两列,regex,database-design,excel,vba,Regex,Database Design,Excel,Vba,我有一张有很多行的桌子。其结构如下图所示: 正如你们所看到的,我在A列中的名称之间有“或”、“和”。我如何将这些列分成两部分?。在这种情况下,大卫、泰勒、弗雷德、杰西、罗兰将出现在第一列,彼得、马克、阿尔弗雷德、霍华德和大卫将出现在第二列 注:请注意第2行和第5行。在这些行中,我有两个“或”或两个“和” 编辑:我更喜欢在Excel中进行编辑 我试过的 作为一种可能的解决方案,我在vba中有这个函数 Function udfRegEx(CellLocation As Range, RegPatt

我有一张有很多行的桌子。其结构如下图所示:

正如你们所看到的,我在A列中的名称之间有“或”、“和”。我如何将这些列分成两部分?。在这种情况下,大卫、泰勒、弗雷德、杰西、罗兰将出现在第一列,彼得、马克、阿尔弗雷德、霍华德和大卫将出现在第二列

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

编辑:我更喜欢在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

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

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

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

正如我提到的,您不需要VBA来完成此操作。Excel公式也可以满足您的需要

(\w)+(( or | and ){0,1}(\w)+)*
我的假设

  • 上校有数据
  • 您希望输出为B列和C列
  • 将此公式粘贴到单元格B1中并复制下来

    =IF(ISERROR(SEARCH(“and”,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(“and”,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))

    快照


    正如我提到的,您不需要VBA来完成此操作。Excel公式也可以满足您的需要

    我的假设

  • 上校有数据
  • 您希望输出为B列和C列
  • 将此公式粘贴到单元格B1中并复制下来

    =IF(ISERROR(SEARCH(“and”,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(“and”,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))

    快照


    您如何尝试拆分它们?在excel中?输出是什么?使用什么代码?@Droid。我的数据是excel格式的。非常感谢。我已经更新了问题你尝试了什么,你被困在哪里?你是被限制在VBA中还是一个公式也会有帮助?@SiddharthRout,这没关系。一个公式或VBA。大卫,我可以给你们两个,但我想先看看你们尝试了什么,你们在哪里卡住了?你们是如何尝试分割它们的?在excel中?输出是什么?使用什么代码?@Droid。我的数据是excel格式的。非常感谢。我已经更新了问题你尝试了什么,你被困在哪里?你是被限制在VBA中还是一个公式也会有帮助?@SiddharthRout,这没关系。一个公式或VBA。大卫,我可以给你们两个,但我想先看看你们尝试了什么,你们在哪里卡住了?找到替换“and”和“and”或“with”、“。。。否则Boris会变成B,是。。。否则是一个很好的解决方案。文本到基于空格的列作为delimeter将给出3列,删除中间的一列:)查找替换“and”和“or”替换为“,”。。。否则Boris会变成B,是。。。否则,这是一个很好的解决方案。根据delimeter中的空格,文本到列将给出3列,删除中间的一列:)