我一直在努力让这个VBA脚本能够自动执行任务,但我无法让它工作。
基本上,我在Excel中有一个包含多列和超过1000行的大任务列表。它包含任务,分配给谁,以及它是打开还是关闭。
在列H中,它是指定给谁的,而列N是任务是打开还是关闭。
我正在尝试按姓氏搜索,如果是OPEN则向计数器添加一个。最终目标是获得一个人拥有多少个开放任务的总数。另外,N列(任务状态)中的一些单元格有额外的文本,如注释等。我确信在单元格中搜索单个单词的InStr函数可以更好地工作,但我无法弄清楚...
这是我的代码
Sub statuscount()
Dim tasksheet As Worksheet
Dim simons_count As Integer
Set tasksheet = ThisWorkbook.Sheets("tasks")
lr = tasksheet.Cells(Rows.Count, 1).End(xlUp).Row
For x = 5 to lr
If tasksheet.Cells(x, 8) = "Simons" And tasksheet.Cells(x, 14) = "OPEN" Then
simons_count = simons_count + 1
End If
Next x
tasksheet.Range("$O$5").Value = simons_count
End Sub
感谢您的帮助!
答案 0 :(得分:0)
使用If /并在VBA中变得棘手,你最好嵌套两个if语句:
For x = 5 to lr
If tasksheet.Cells(x, 8) = "Simons" Then
If InStr(tasksheet.Cells(x, 14).Value, "OPEN") > 0 Then
simons_count = simons_count + 1
End If
End If
Next x
答案 1 :(得分:0)
这是一个更通用的功能。插入一个模块并将以下代码放入其中。您可以像使用任何其他Excel内置函数一样使用该函数
Function LastNamecounter(lastName As String, status As String) As Long
LastNamecounter = 0
Dim tasksheet As Worksheet
Set tasksheet = ThisWorkbook.Sheets("tasks")
lr = tasksheet.Cells(Rows.Count, 1).End(xlUp).Row
For i = 5 To lr
If InStr(tasksheet.Cells(i, 8).Value, lastName) <> 0 And InStr(tasksheet.Cells(i, 14).Value, status) <> 0 Then
LastNamecounter = LastNamecounter + 1
End If
Next i
End Function