Excel 无法计算每个单元格中出现的特定符号

Excel 无法计算每个单元格中出现的特定符号,excel,vba,split,conditional-statements,Excel,Vba,Split,Conditional Statements,我试图创建一个宏,它应该检查多个范围,以确定是否有多个项目用分号分隔;在某些细胞内。如果找到一个,宏将计算该符号的次数;已出现在每个单元格中: 例如,在范围A1中,该符号出现了3次: apple;orange;guava;malta 到目前为止,我已经尝试过: Sub DistributeItemsToColumns() Dim cel As Range For Each cel In Range("A1:L4") If InStr(cel, ";") >

我试图创建一个宏,它应该检查多个范围,以确定是否有多个项目用分号分隔;在某些细胞内。如果找到一个,宏将计算该符号的次数;已出现在每个单元格中:

例如,在范围A1中,该符号出现了3次:

apple;orange;guava;malta
到目前为止,我已经尝试过:

Sub DistributeItemsToColumns()
    Dim cel As Range

    For Each cel In Range("A1:L4")
        If InStr(cel, ";") > 0 Then
            Debug.Print cel  'can't think further
        End If
    Next cel
End Sub
尝试:

结果:


向上阅读文本至列:无需循环。事实上,录制一个宏,然后选择相关列==>Data选项卡==>Text To Columns。我对您想要的内容感到困惑,所描述的@SiddharthRout方法与下面的答案完全相同。或者这里的关键是跳过单个值吗?是的,棘手的部分总是让人困惑。悉达多首先建议我追求卓越。查看这篇文章的标题,了解我对@JvdV的期望。[1]就问题的标题而言,它已经改变了很多次。请参阅未经编辑的版本。最初的标题是“无法拆分不同单元格的内容并有条件地将其重新排列到列中”[2]您所问的问题并不复杂。这是一个简单的问题。Excel内置了.TextToColumns。如果你像我在第一条评论中建议的那样录制了一个宏,你会得到一个1-2行代码,你可以编辑它来得到你想要的。您不需要一个循环来分割您最初想要的文本[3]VBA不会濒临灭绝。这是一个神话。我不确定你所说的哪些开发人员已经失去了希望:看看VBA标签,人们是否已经放弃了希望?[4] 就能力而言,我们不要走那条路。。。你可以自由地接受这个答案:是的,它做得很好。你能告诉我如何计算这些迹象的出现次数吗;在每个单元中?
Option Explicit

Sub test()

    Dim LastRow As Long, i As Long, arr As Variant
    Dim NumberOfOccu As Long

    With ThisWorkbook.Worksheets("Sheet1")

        'Find last row of column A
        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row

        'Loop from row 1 to lastrow
        For i = 1 To LastRow

            If InStr(.Range("A" & i).Value, ";") Then
                'Number of characters
                NumberOfOccu = InStr(.Range("A" & i).Value, ";")
                arr = Split(.Range("A" & i).Value, ";")
                .Range("C" & i).Resize(, UBound(arr) + 1) = arr

            End If

        Next i

    End With

End Sub