都已经用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
追问还是上面公式那个实用些,下面这个有点小问题。
追答额,好吧……公式很影响速度……特别是数据量越来越大的时候。