在工作表A中是一个名称列表。我试图在工作表B,B列的表格中计算工作表A上的不同名称。名称不准确,我将指的是单元格,而不是写在名称中。下面的子几乎可以工作但我认为我没有正确使用wildcqard。如果可以的话请帮忙。提前谢谢。
Sub Countif_Crr_Cnt_Until_LastRow()
Dim LastRow As Long
Dim wb1 As Workbook
Set wb1 = Workbooks("macro all client v.01.xlsm")
LastRow = wb1.Sheets("A").Range("A:A").Find("Overall - Total", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
For i = 21 To LastRow
Cells(i, 10) = Application.CountIfs(wb1.Sheets("B").Range("B:B"), "*" & Cells(i, 3) & "*")
Next
End Sub
答案 0 :(得分:4)
我认为只使用Cells()
时问题就是不合格的引用。当使用多张纸时,VBA需要知道您希望在哪张纸上。我假设Cells(i,10)
和Cells(i,3)
位于工作表“A”上。如果没有,只需更改工作表名称:
wb1.Sheets("A").Cells(i, 10) = Application.CountIfs(wb1.Sheets("B").Range("B:B"), "*" & wb1.Sheets("A").Cells(i, 3) & "*")
正如你所看到的,这有点长而且有点棘手。另一种方法是使用With
:
With wb1.Sheets("A")
.Cells(i,10) = Application.CountIfs(wb1.Sheets("B").Range("B:B"), "*" & .Cells(i,3) & "*")
End With
因此,无论您在.Cells()
之前看到一个没有任何内容的简单.
,它都会使用With
之后的内容。所以这相当于上面的公式......这有意义吗?