根据值将一个表的列拆分为两列

时间:2012-08-30 15:35:03

标签: regex database-design excel-vba vba excel

我有一张这么多行的表格。它的结构就像这张图片:

enter image description here

正如你所看到的,我在列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

此功能使用Regex。但我不知道如何使用它。

3 个答案:

答案 0 :(得分:2)

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

我的假设

  1. Col A有数据
  2. 您希望Col B和Col C中的输出
  3. 将此公式粘贴到单元格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)))

    并在Cell 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)))

    <强>快照

    enter image description here

答案 1 :(得分:1)

(\w)+(( or | and ){0,1}(\w)+)*

答案 2 :(得分:1)

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

相关问题