微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在多个空格上拆分列

如何解决在多个空格上拆分列

我在电子表格中有一堆条目,我想分成两列。

数据看起来像这样:

102483             STEIN LOKK B4-702
102482             STEIN LOKK BF-701
102413             RINGFUGEKULL 352X353X214 POS 2 Å1
102412             RINGFUGEKULL 352X353X135 POS 1 ÅI
102388             STEIN ISOLER MOSCONI MSB-475 500x250x 76
102387             STEIN ISOLER MOSCONI MSB-475 500x250x152
102384             OVNSFUNdamENT CRADLE
102383             STEIN PLATE HA-040 KVAL,HSU95
102382             STEIN PLATE HA-039 KVAL,HSU95
102376             OLJE SYNT. MITRA 220
102341             KULL BUNN ÅI/ÅIIC  D 3365 x 550 x 490
102291             OLJE 10W-40 HAVOLINE FORMULA 3 DIESEL
102241             FETT mineRALSK PATRON STARPLEX EP 2
102231             OLJE FYRINGSOLJE NR.1 (F)
102211             CALDE SRRIX 14
102141             STEIN ISOLER AAM HIPOR 230X114X 76
102103             STAMPEMASSE ILDFAST AL-85-F
102102             STEIN BORGESTAD INSULATING FIREBRICKS
102101             STAMPEMASSE TYPE T-JUSTERT ELKEM
101964             PAKNING LEX THERMOSEAL PGF-1 LEX Ø12mm
101939             BOKS KOMPENSASJON F/OVN 4 OG 4B 1170

分隔符是产品编号和名称间的一堆空格。

尝试使用Excel的“文本转列”功能,似乎没有一种方法可以指定多个字符作为分隔符,并且如果我仅使用一个空格,那么也会产生产品名称拆分的问题。

我写了一个小宏来为我做这件事(见下文),但是我觉得我可能会使事情变得过于复杂。有没有更简单的方法可以做到这一点?我的方法是否有任何明显的方法可能失败?我对正则表达式不太熟悉,所以我不确定我选择的模式是否是最好的...

Sub split_column()
    Dim ws As Worksheet
    Dim regexp As Object
    Dim reMatches As Object
    Dim c As Range
    
    Call deaktiver
    
    Set regexp = CreateObject("VBScript.RegExp")
    Set ws = År_2017
    
    With regexp
        .Global = False
        .MultiLine = False
        .IgnoreCase = False
        .Pattern = "^(\d+)\s{2,}(.+)$"
    End With
    
    For Each c In ws.Range("A2:A" & ws.Range("A2").End(xlDown).Row)
        Set reMatches = regexp.Execute(c.Value2)
        If reMatches.Count > 0 Then
            c = Trim(reMatches(0).SubMatches(0))
            c.Offset(0,1) = Trim(reMatches(0).SubMatches(1))
        End If
    Next c
    
    Call reaktiver
End Sub

Private Sub deaktiver()
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Application.displayStatusBar = False
    Application.Calculation = xlCalculationManual
End Sub

Private Sub reaktiver()
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    Application.displayStatusBar = True
    Application.Calculation = xlCalculationAutomatic
End Sub

解决方法

您的数据具有很好的固定格式。在单元格 B1 中输入:

,而不是TextToColumns或VBA。
=LEFT(A1,6)

并在 C1 中使用:

=MID(A1,20,99)

enter image description here

EDIT#1:

对于非常规数据,请使用:

=LEFT(A1,FIND(" ",A1)-1)
=MID(TRIM(A1),TRIM(A1))+1,99)

分别用于 B1 C1

EDIT#2:

Siddharth 有一个要点。最好使用:

=MID(TRIM(A1),LEN(A1))

而不是:

=MID(TRIM(A1),99)
,

是的,它更简单,更快。

Dim input_,output_,i&
input_ = ws.Range("A2:A" & ws.Range("A2").End(xlDown).Row).Value2
ReDim output_(LBound(input_) To UBound(input_),1 To 2)
For i = LBound(input_) To UBound(input_)
    output_(i,1) = Split(input_(i,1),"        ")(0)
    output_(i,2) = Split(input_(i,"        ")(1)
Next
ws.Range("A2:B" & ws.Range("A2").End(xlDown).Row) = output_

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。