Vba 用于多行文本的宏

Vba 用于多行文本的宏,vba,excel,Vba,Excel,我有一张excel表格,其中一列标题名称“LOTZ”多行商品名称列在单个单元格中(商品数量变化,例如第1天有7件商品,第2天可能有1件商品)。我需要创建前50名的商品在整个一年中与各自的计数在单独的表 示例:- 我希望在新插入的工作表中得到的结果:- 我能够使用数据选项卡“文本到列”,但不知道如何通过宏代码进行合并 我们将非常感谢您的帮助 谢谢monika试试这个: Sub consolidate() Dim r As Range, dict As Object, lotz

我有一张excel表格,其中一列标题名称“LOTZ”多行商品名称列在单个单元格中(商品数量变化,例如第1天有7件商品,第2天可能有1件商品)。我需要创建前50名的商品在整个一年中与各自的计数在单独的表

示例:-

我希望在新插入的工作表中得到的结果:-

我能够使用数据选项卡“文本到列”,但不知道如何通过宏代码进行合并

我们将非常感谢您的帮助

谢谢monika试试这个:

Sub consolidate()
    Dim r As Range, dict As Object, lotz
    Set dict = CreateObject("Scripting.Dictionary")
    For Each r In Worksheets("Sheet1").UsedRange.Columns("C").Offset(1).Cells
        For Each lotz In Split(r.value, vbLf)
            dict(lotz) = dict(lotz) + 1
        Next
    Next
    With Worksheets.Add
        .Range("A1:B1").value = Array("LOTZ", "Count")
        .Range("A2:A" & dict.Count + 1).value = Application.Transpose(dict.Keys)
        .Range("B2:B" & dict.Count + 1).value = Application.Transpose(dict.Items)
        .Range("A2:B" & dict.Count + 1).Sort .Range("B2"), xlDescending
    End With
End Sub
编辑

如果
lotz
的列未知,并且您希望在第1行中找到其标题,则可以使用以下方法:

For Each r In Worksheets("Sheet1").UsedRange.Find("LOTZ").EntireColumn.SpecialCells(xlCellTypeConstants).Offset(1)

谢谢,当LOTZ工作表的位置发生变化时,您能建议一种方法吗。意味着查找标题LOTZ并在列上运行,同时将计数按降序排序代码也给出标题计数,即LOTZ=1@monikasingh我认为编辑的代码满足了您的要求。是的,它做得很好-最后一个输入是我们可以将添加的工作表命名为LOTZ吗