将单元格拆分为不同数量的单元格 - Excel

时间:2013-11-25 17:35:48

标签: excel excel-vba excel-formula vba

如果回答了类似的问题,请道歉。我做了搜索,但找不到我要找的东西。

我有一张电子表格,我已经复制并粘贴了大量有关各种啤酒的数据。我想将包含文本的单个单元格分成对应于啤酒类型和酒精百分比的任意数量的单元格。我遇到麻烦的是,有些啤酒有两个或更多类别,而大多数啤酒只有一个。

这是我试图分割的文本字符串的示例:

American Pale Ale (APA) / 6.40% ABV
Quadrupel (Quad) / 10.20% ABV
American Double / Imperial IPA / 8.00% ABV
American Wild Ale / 7.75% ABV

预期结果是:

Category 1              | Category 2   | Alcohol %

American Pale Ale (APA) |              | 6.40% ABV
Quadrupel (Quad)        |              | 10.20% ABV
American Double         | Imperial IPA | 8.00% ABV
American Wild Ale       |              | 7.75% ABV

对于只有一类啤酒,我一直在使用以下公式:

=RIGHT(D3,LEN(D3)-SEARCH("/",D3,1))

然而,无论啤酒有多少种类,我都希望能有所作为。我觉得必须有可能看到有一个共同的分隔符(/)。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

假设您的工作簿看起来像这样

enter image description here

试试这段代码。我已对代码进行了评论,以便您在理解代码时不会遇到任何问题。

Option Explicit

Sub Sample()
    Dim MYAr
    Dim ws As Worksheet, wsOutput As Worksheet
    Dim Lrow As Long, i As Long, j As Long, rw As Long, SlashCount As Long, col As Long

    '~~> Set this to the relevant worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")

    With ws
        '~~> get the last row
        Lrow = .Range("A" & .Rows.Count).End(xlUp).Row

        '~~> Count the max number of "/" in a particular cell
        '~~> This will decide the span of the columns
        For i = 1 To Lrow
            MYAr = Split(.Range("A" & i).Value, "/")
            If UBound(MYAr) + 1 > SlashCount Then SlashCount = UBound(MYAr) + 1
        Next i

        '~~> Add a new worksheet for output
        Set wsOutput = ThisWorkbook.Sheets.Add
        rw = 1

        For i = 1 To Lrow
            MYAr = Split(.Range("A" & i).Value, "/")

            col = 1
            '~~> Write values to column. We will not write the
            '~~> Last value of the array here
            For j = LBound(MYAr) To (UBound(MYAr) - 1)
                wsOutput.Cells(rw, col).Value = MYAr(j)
                col = col + 1
            Next j
            '~~> Write Last value of the array to the last column
            wsOutput.Cells(rw, SlashCount).Value = MYAr(UBound(MYAr))
            rw = rw + 1
        Next i
    End With
End Sub

<强>输出

enter image description here

答案 1 :(得分:1)

您也可以使用Excel中内置的Text-to-column选项,而不是使用宏。 转到数据 - &gt;文本到列

将弹出一个对话框。在该选择分隔的单选按钮,然后单击下一步。 然后指定要分隔文本的分隔符,然后单击“下一步”并完成。 你会得到你想要的结果。