我正在尝试做一个 excel 来计算某个字母出现在表格列中的次数。
我想要做的是创建一个动态表,我总是可以在其中添加新行。因此,我需要一个函数,该函数将其中一列作为参数,该函数计算另一个参数出现的次数。
例如,计算“列”中“移位”的数量(:
Function sumColumnShifts(column As Integer, shift As range) As Integer
sumColumnShifts = sumDayShifts(ActiveSheet.ListObjects("foo").ListColumns(column).range.Select, shift)
End Function
Public Function sumDayShifts(ByVal Target As range, shift As range) As Variant
Dim res As Integer
res = 0
For Each cell In Target
If shift.cells(1, 1).Value = cell.Value Then
res = res + 1
End If
Next
sumDayShifts = res
End Function
这里的问题是函数找不到表,但表存在。我究竟做错了什么?是ActiveSheet.ListObjects("foo").ListColumns(column).range.Select吗?这不是一个范围?我无法在函数中访问它?
谢谢。
你不能只用
=COUNTIF(foo[[#All],[Column1]],"A")
除此以外,
我将通过 ListObject 名称和列标题以及搜索值进行搜索,并在函数中使用 Countif 返回计数。您还可以更改函数以将工作表作为参数传递给函数,以使其更加灵活。
Option Explicit
Public Sub Test()
Const SEARCH_HEADER As String = "Column1"
Const SEARCH_VALUE As String = "A"
Const TABLE_NAME As String = "foo"
Debug.Print GetCount("foo", SEARCH_HEADER, SEARCH_VALUE)
End Sub
Public Function GetCount(ByVal tableName As String, ByVal searchHeader As String, ByVal searchValue As String) As Variant
Dim ws As Worksheet, table As ListObject
Set ws = ThisWorkbook.Worksheets("Sheet1")
On Error Resume Next
Set table = ws.ListObjects("foo")
On Error GoTo 0
If table Is Nothing Or IsError(Application.Match(table.HeaderRowRange, searchHeader, 0)) Then
GetCount = CVErr(xlErrNA)
Exit Function
End If
GetCount = Application.WorksheetFunction.CountIf(table.ListColumns(searchHeader).DataBodyRange, searchValue)
End Function
数据:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句