将B列的分割数据粘贴到D列和D列中。 E

时间:2016-08-30 20:44:48

标签: excel vba excel-vba split

在B栏中有5个字符的项目代码+项目描述。 我设法创建一个宏,将5个字符项代码从B列复制/粘贴到D列,将项目描述复制/粘贴到E列。

示例:

          Column B              Column C  Column D     Column E
XX787 DO BOLOGNESE 2X2.28KG FR   <other>    XX787    DO BOLOGNESE 2X2.28KG FR

我面临以下问题:

  • 约1%的商品代码不是5个字符,而是8个字符,例如
  • 8个字符中存在的此百分比存在数字,以0
  • 开头

正如您所看到的,最后2个是具有不同格式的项目代码的示例,即使它们只有少量,当然也必须考虑它们。

因此,根据我目前的编码,会出现以下问题:

Hier een foto

我认为宏应该执行以下操作才能使其正常工作:

对于D栏中的项目代码:在B列的第一个空格之前复制/粘贴所有字符 对于E列中的项目描述:复制/粘贴第一个空格后的所有字符

我目前正在为此运行的代码如下:

Sub Seperate_Item_Code_And_Description_Code()
    'Copy/paste the item codes and descriptions from column B to column D and E seperately

    Range("B12").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.TextToColumns Destination:=Range("D12"), DataType:=xlFixedWidth, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
    FieldInfo:=Array(Array(0, 1), Array(6, 1)), TrailingMinusNumbers:= _
    True
End Sub

1 个答案:

答案 0 :(得分:0)

尝试使用此编码和条件文本到列。

Option Explicit

Sub wqewtrqw()
    Dim s As Long, a As Long, aVALs As Variant

    With Worksheets("Sheet5")
        aVALs = .Range(.Cells(12, "B"), .Cells(.Rows.Count, "B").End(xlUp)).Value2
        ReDim Preserve aVALs(LBound(aVALs, 1) To UBound(aVALs, 1), 1 To 2)
        For a = LBound(aVALs, 1) To UBound(aVALs, 1)
            s = InStr(1, aVALs(a, 1), Chr(32))
            aVALs(a, 2) = Mid(aVALs(a, 1), s + 1)
            aVALs(a, 1) = Left(aVALs(a, 1), s - 1)
        Next a
        .Cells(12, "D").Resize(UBound(aVALs, 1), UBound(aVALs, 2)) = aVALs
    End With
End Sub