将分隔的Excel数据分成2列

时间:2012-01-05 01:58:54

标签: excel parsing excel-vba vba

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

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

是否有一种方法(在Excel中)来分隔数据,以便我可以维护我的行但是在一列中包含名称而在另一列中包含电子邮件地址?我也可以自动完成这项工作,比如每天结束时左右吗?

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

根据您对@ 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 open(将其放在ThisWorkbook模块中)

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

答案 2 :(得分:0)

这是一个使用Text to columns的自动解决方案。只要您的数据始终在单元格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模块中,每次打开工作簿时都会运行。