【问题标题】:Separate delimited Excel data into 2 columns将分隔的 Excel 数据分成 2 列
【发布时间】:2013-01-15 16:31:49
【问题描述】:

我在 Excel 的 A 列中有一些电子邮件地址。有很多行,但是名称与每个电子邮件地址都附加在同一个单元格中,所以它看起来像这样:

johnsmith:johnsmith@gmail.com
adamsmith:adam1i2@gmail.com
CoryAdam:Cory1991@gmail.com

有没有办法(在 Excel 中)分隔数据,以便我可以维护我的行,但将名称放在一列中,将电子邮件地址放在另一列中?我也可以自动执行此操作,例如在每天结束时左右吗?

【问题讨论】:

  • 没有分隔符,无法解析。源数据是什么格式的?
  • 克里斯为您提供了一个自动化的解决方案。您也可以考虑使用 Text to Columns,以 : 作为分隔符。

标签: parsing excel vba


【解决方案1】:

根据您对@user496607 回答的评论,您的数据实际上是

johnsmith:johnsmith@gmail.com
adamsmith:adam1i2@gmail.com
CoryAdam:Cory1991@gmail.com

A 列中。这是正确的吗?

您想让 Excel 在每次打开工作簿时自动将其拆分为 AB 列?

这个Sub 将进行拆分

Sub SplitNames(sh As Worksheet)
    Dim rng As Range
    Dim dat As Variant
    Dim i As Long, j As Long, s As String

    Set rng = sh.Range(sh.Cells(1, 1), sh.Cells(sh.Rows.Count, 1).End(xlUp))

    'rng.Select
    dat = rng.Formula
    If IsArray(dat) Then
        ReDim Preserve dat(1 To UBound(dat, 1), 1 To 2)
        For i = LBound(dat, 1) To UBound(dat, 1)
            s = dat(i, 1)
            j = InStr(dat(i, 1), ":")
            If Left(s, 1) <> "=" And j > 0 Then
                dat(i, 2) = Mid(s, j + 1)
                dat(i, 1) = Left(s, j - 1)
            End If
        Next
        rng.Resize(, 2).Formula = dat
    End If
End Sub

这可能会被另一个 Sub 在您想要的任何触发器上调用。例如这将在Workbook打开时调用它(把它放在ThisWorkbook模块中)

Private Sub Workbook_Open()
    Dim sh As Worksheet
    For Each sh In Me.Worksheets
        SplitNames sh
    Next
End Sub

【讨论】:

    【解决方案2】:

    假设 C3 列中存在一封电子邮件,您可以尝试以下操作(将公式写在 D3 列中):

    =LEFT(C3,FIND("@",C3)-1)

    然后您可以将相同的公式应用于所有行。

    【讨论】:

    • 对不起,如果我不清楚,数据都在 A 列中,并且在行示例 A1、A2、A3 等中完成。有一个共同的分隔符,所以数据是名称:电子邮件(A1)名称:电子邮件(A2),其中:作为分隔符,我想知道是否可以让excel自动将名称分隔到a列和电子邮件到b列?
    • 如果有分隔符(如冒号),您应该编辑您的问题以反映这一点。使用分隔符(又名分隔符),这是一个很容易解决的问题,可以通过 Excel 中的公式或文本到列功能来完成。
    • ah^^ 感谢您提供此信息,是否可以让 excel 在 x 时间内自动运行此任务或在打开文件时运行此任务?
    【解决方案3】:

    这是一个使用文本到列的自动化解决方案。只要您的数据始终从单元格 A1 开始,它就会起作用,正如您所说的那样:

    Private Sub Workbook_Open()
        Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)).Select
                    Selection.textToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
                    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
                    Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
                    :=":"
    End Sub
    

    把它放在ThisWorkbook 模块中,它会在你每次打开工作簿时运行。

    【讨论】:

      猜你喜欢
      • 2012-12-22
      • 2016-05-25
      • 1970-01-01
      • 2010-11-17
      • 2015-04-12
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 2021-04-16
      相关资源
      最近更新 更多