请教EXCEL公式写入宏。

公式:=IF(COUNTIF(B$1:B1,B1)=COUNTIF(B:B,B1),COUNTIF(B:B,B1),"")
在B或CDE列输入数据后,F列中对应的行输入上面的公式,用宏代码怎么写。

都已经用VBA了,还在单元格写公式,感觉很别扭……不过代码如下:

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column >= 3 And Target.Column <= 5 Then
    Range("F" & Target.Row).Formula = "=IF(COUNTIF(B$1:B" & Target.Row & ",B" & Target.Row & ")=COUNTIF(B:B,B" & Target.Row & "),COUNTIF(B:B,B" & Target.Row & "),"""")"
End If
End Sub

追问

能不用公式最好啊,那要怎么写。只要能实现上面公式的功能就行。就是在输入日期或姓名后,在每天的最后一行F列自动计算每天的行数。

追答

如果你只是为了统计B列的各日期出现的次数,那么触发的条件仅针对B列即可。因为你即使在CDE列输入数值,也不影响B列的统计结果。

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 Then
    Application.EnableEvents = False
    Dim d
    Set d = CreateObject("Scripting.Dictionary")
    Dim i, r As Long
    r = Cells(Rows.Count, "B").End(xlUp).Row
    For i = 1 To r
        d(Cells(i, "B").Value) = d(Cells(i, "B").Value) + 1
    Next
    Columns("F").ClearContents
    For i = r To 1 Step -1
        If d.exists(Cells(i, "B").Value) Then Cells(i, "F").Value = d(Cells(i, "B").Value): d.Remove (Cells(i, "B").Value)
    Next
    Application.EnableEvents = True
End If
Set d = Nothing
End Sub

追问

还是上面公式那个实用些,下面这个有点小问题。

追答

额,好吧……公式很影响速度……特别是数据量越来越大的时候。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-03-11
用录制宏的方式,可以看到输入的代码。