VBA:在单元格中拆分文本,为单元格

时间:2017-02-18 17:43:02

标签: excel vba excel-vba

问题

当我尝试运行宏时,我在“With Sheets(”Sheet5“)一行上遇到语法错误。

enter image description here

我是VBA的新手,但我相信在其他网站上找到this example之后我就走在了正确的轨道上。

我的数据

我有一张包含10k记录的表格。在列K中,我有一个字段“genres”,其字符串值由“|”描绘。一个例子是:

2015    32.985763   150000000   1513528810  124 6/9/15  5562    6.5 2015    137999939.3 Action|Adventure|Science Fiction|Thriller       

类型值是:

Action|Adventure|Science Fiction|Thriller   

预期结果

我要做的是通过“|”拆分流派单元格中的值,并为每个流派创建一个新行,并将原始行中的值复制到新行中。

使用上面的数据作为示例,我将循环4个类型,创建4个新行,并在genres列中,将4个值替换为for循环的1个值,并删除原始行。结果是:

2015    32.985763   150000000   1513528810  124 6/9/15  5562    6.5 2015    137999939.3 Action  
2015    32.985763   150000000   1513528810  124 6/9/15  5562    6.5 2015    137999939.3 Adventure   
2015    32.985763   150000000   1513528810  124 6/9/15  5562    6.5 2015    137999939.3 Science Fiction 
2015    32.985763   150000000   1513528810  124 6/9/15  5562    6.5 2015    137999939.3 Thriller    

功能

我一直在努力了解我发现的例子中发生了什么。我认为它在for循环中是正确的,但我对它与With Sheets(“Sheet5”)行的错误感到困惑。数据在Sheet5上。

Option Explicit
Sub ReorgData()
    Dim r As Long, lr As Long, s
    Application.ScreenUpdating = False
    With Sheets("Sheet5”)
        lr = .Cells(Rows.Count, 11).End(xlUp).Row
        For r = lr To 2 Step -1
            If InStr(.Cells(r, 11), “|") > 0 Then
                s = Split(Trim(.Cells(r, 11)), “|”)
                .Rows(r + 1).Resize(UBound(s)).Insert
                .Cells(r + 1, 1).Resize(UBound(s), 11).Value = .Cells(r, 1).Resize(, 11).Value
                .Cells(r, 12).Resize(UBound(s) + 1).Value = Application.Transpose(s)
                .Cells(r + 1, 13).Resize(UBound(s), 3).Value = .Cells(r, 13).Resize(, 3).Value

            End If
        Next r
        .Columns(12).AutoFit
    End With
    Application.ScreenUpdating = True
End Sub

1 个答案:

答案 0 :(得分:3)

更改为"。 VBA需要标准的双引号作为字符串分隔符。

您还会遇到以下问题:

        If InStr(.Cells(r, 11), “|") > 0 Then
            s = Split(Trim(.Cells(r, 11)), “|”)

我不确定这是否应该被归类为“简单的印刷错误”,因此问题应该被关闭,但是很多人都有这个问题,我会在这里留下这个答案,直到有人关闭问题。