【问题标题】:Separating Data in the same excel column在同一个excel列中分离数据
【发布时间】:2016-06-07 23:19:34
【问题描述】:

我有一列包含多种值类型的数据。我试图将每个值类型分离到一个单独的列中。下面是数据示例:

6 - Cutler, Jay (Ovr: 83)
22 - Forte, Matt (Ovr: 88)
86 - Miller, Zach (Ovr: 80)

我尝试通过 a) 转到数据并单击文本到列来分隔数据;但是,数据的“Ovr:80”部分并未将“Ovr”与 80 分开。我还尝试 b)转换为 .csv 文件,但再次无法将“Ovr”与“80”分开。是否有一个公式可以用来将这部分数据与其他部分分开?

我希望将数据分成不同的列,如下所示:

6 | Cutler, | Jay | Ovr | 83
22 | Forte | Matt | Ovr | 88
86 | Miller | Zach | Ovr | 80 

非常感谢任何见解!

【问题讨论】:

  • 查看您的数据,您可以尝试一些非常简单的方法,如果数据总是这样,这可能会起作用,替换 - , ( ) :没有任何内容的字符,然后最后用单个空格替换双空格,然后你最终得到一个完美的空格分隔数据集:),我想你可以设置一个公式来做到这一点,我个人会使用 vba 并使用 vba 执行上述相同操作或使用 RegEx,这将是一个更安全的选择非常灵活,数据变化很大
  • 为什么Cutler后面的逗号保留了,Forte和Miller后面的逗号去掉了??
  • @Gary'sStudent 我会接受一个有根据的猜测,这是一个错字
  • 当您从功能区对列执行文本时,选择分隔后,您应该会看到可以使用的分隔符列表。我会在空格、昏迷和其他旁边打一个复选标记,我会选择 - 、 ( 或 )。我还将选中“将连续分隔符视为一个”框然后您可以删除 - 如果您没有选择它作为分隔符的列,然后对其中一个重复该过程(Over:并选择“(”作为另一个分隔符。或者如果可以选择在 80) 列上重复该过程并选择“)”作为您的另一个分隔符。
  • @Gary'sStudent 是的,这是一个错字,感谢 Forward Ed

标签: excel csv excel-formula pivot-table


【解决方案1】:

选择您要处理的单元格并运行此宏以将结果放置在所选单元格右侧的单元格中:

Option Explicit

Sub dural()
    Dim r As Range, s As String, ary
    Dim i As Long, a
    For Each r In Selection
        s = r.Value
        If s <> "" Then
            s = Replace(Replace(s, "-", " "), ",", " ")
            s = Replace(Replace(s, "(", " "), ")", " ")
            s = Application.WorksheetFunction.Trim(Replace(s, ":", " "))
            ary = Split(s, " ")
            i = 1
            For Each a In ary
                r.Offset(0, i).Value = a
                i = i + 1
            Next a
        End If
    Next r
End Sub

【讨论】:

    【解决方案2】:

    使用上面的方法你可以做这样的事情......

    首先清理文本,使其更易于管理,使用此公式并复制到列中,您可以清理它,使其成为空格分隔的集合

    =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"- ",""),",",""),"(",""),")",""),":","")
    

    从那里只需将公式给您的值复制到新工作表中,然后使用“文本到列”将其拆分为列。

    【讨论】:

      【解决方案3】:

      如果你愿意做文本到列选项,我不推荐这种方法。

      用于此解决方案的函数是:

      对于您的第一列文本,请使用以下内容:

      =left(A1,find(" ",A1))*1
      

      假设您没有任何前导空格,这将拉出第一个数字。 *1 将文本转换为数字。

      对于您上次的第二列,请使用以下内容:

      =MID(A1,FIND("-",A1)+2,FIND(",",A1)-(FIND("-",A1)+2))
      

      如果您有一个逗号和一个破折号,如示例数据中所示,您将不会收到错误,它应该提取没有逗号的姓氏。

      对于您的第三列名字,请遵循与姓氏相同的一般技术,如下所示,

      =MID(A1,FIND(",",A1)+2,FIND("(",A1)-2-(FIND(",",A1)+2)+1)
      

      按照类似的模式让你越过专栏

      =MID(A1,FIND("(",A1)+1,FIND(":",A1)-1-(FIND("(",A1)+1)+1)
      

      最后要让你的年龄列使用这个:

      =MID(A1,FIND(":",A1)+2,FIND(")",A1)-1-(FIND(":",A1)+2)+1)
      

      根据需要复制上述公式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-07
        • 1970-01-01
        • 2015-06-28
        • 1970-01-01
        • 2019-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多