使用VBA计算名称的出现次数

时间:2016-07-13 11:41:12

标签: excel vba excel-vba

抱歉,我是VBA的新手。 Vlookup需要X和X列。 Y工作正常。但是,对于Z列,我试图计算B列中的名称数量,但是一个错误不断弹出。我想知道为什么?

Dim lastrow As Long
lastrow = Range("A2").End(xlDown).Row

Range("X2:X" & lastrow).FormulaR1C1 = "=VLOOKUP(RC[-23],'Sheet2'!R1C1:R25000C10,7,0)"
Range("Y2:Y" & lastrow).FormulaR1C1 = "=VLOOKUP(RC[-24],'Sheet2'!R1C1:R25000C10,2,0)"
Range("Z2:Z" & lastrow).FormulaR1C1 = "=LEN(RC[-22]-LEN(SUBSTITUTE(RC[-22], "";"", ""))+1"
Columns("X:Z").EntireColumn.AutoFit

基本上,我试图实现的目标如下。 Z列将自动填充B列中名称的出现

enter image description here

2 个答案:

答案 0 :(得分:1)

我认为你在函数字符串中缺少一个括号,以及空字符串的转义引号,所以它应该是:

 Range("Z2:Z" & lastrow).FormulaR1C1 = "=LEN(RC[-22])-LEN(SUBSTITUTE(RC[-22], "";"", """"))+1"

答案 1 :(得分:1)

我意识到这个答案没有回答你的问题,但至少以下代码的目的是相同的。如果RGA先生指出范围内有空白或合并的单元格,那么为了解决问题,我改变了制定变量的方式Last_Row

    Sub Count_Name()
    Dim i As Long, Last_Row As Long
    With Sheets("Sheet1")
        'It won't be a problem anymore if there are blanks or merged cells in the range using this line
        Last_Row = Range("A" & .Rows.Count).End(xlUp).Row
        For i = 2 To Last_Row
           If .Cells(i, "A") = "" Then
                .Cells(i, "B") = 0
           Else
                .Cells(i, "B") = Len(.Cells(i, "A")) - Len(Replace(.Cells(i, "A"), ";", "")) + 1
           End If
       Next i
    End With
    End Sub

这里我假设字符串名称在列A 中,名称数量在列B 中,并且两个数据都在 Sheet1中即可。上述代码的等效Excel公式是

=LEN(A2) - LEN(SUBSTITUTE(A2, ";", "")) + 1