Excel 具有可变范围的CountIfs
尝试在每次迭代都会更改列的范围内执行Excel 具有可变范围的CountIfs,excel,vba,Excel,Vba,尝试在每次迭代都会更改列的范围内执行CountIfs——使用固定列通过range(“a:a”)工作,但将其转换为数字或变量失败 我尝试了几种不同的方法来调整它——当我将它转换为一个固定的列(“a:a”)时,它可以工作,但任何其他方法都会导致它失败 有效: MRank=Application.WorksheetFunction.CountIfs(Sheets("Performance").Range("F:F"), Location, Sheets("Performance").Range("G:
CountIfs
——使用固定列通过range(“a:a”)
工作,但将其转换为数字或变量失败
我尝试了几种不同的方法来调整它——当我将它转换为一个固定的列(“a:a”)
时,它可以工作,但任何其他方法都会导致它失败
有效:
MRank=Application.WorksheetFunction.CountIfs(Sheets("Performance").Range("F:F"), Location, Sheets("Performance").Range("G:G"), ">=" & MValue)
不起作用:
MRank=Application.WorksheetFunction.CountIfs(Sheets("Performance").Range("F:F"), Location, Sheets("Performance").Range(Cells(3, 7), Cells(1987, 7)), ">=" & MValue)
MRank=Application.WorksheetFunction.CountIfs(Sheets("Performance").Range("F:F"), Location, Sheets("Performance").Range(Cells(3, SelectedColumn), Cells(LastRow, SelectedColumn)), ">=" & MValue)
不起作用:
MRank=Application.WorksheetFunction.CountIfs(Sheets("Performance").Range("F:F"), Location, Sheets("Performance").Range(Cells(3, 7), Cells(1987, 7)), ">=" & MValue)
MRank=Application.WorksheetFunction.CountIfs(Sheets("Performance").Range("F:F"), Location, Sheets("Performance").Range(Cells(3, SelectedColumn), Cells(LastRow, SelectedColumn)), ">=" & MValue)
应返回同一区域中公制值等于或高于所选值的位置计数。这将包含Danny&JVDV的评论
在您的工作公式中,使用了整列,这使得计算/填充等所需的时间更长。在可能的情况下,使用精确、统一的范围是相当理想的 窃取您的工作代码来构建:
Application.WorksheetFunction.CountIfs(Sheets("Performance").Range("F:F"), Location, Sheets("Performance").Range("G:G"), ">=" & MValue)
分解这些,我会输入一些变量来设置范围:
Application.CountIfs(LocRng, Location, MValRng, ">=" & MValue)
使用变量帮助定义范围,例如:
sr = 3 'from example, starting row
lr = 1987 'from example, last row
With ws 'Danny's suggestion to post
set LocRng = .cells(sr,"F").Offset(lr-sr)
set MValRng = .cells(sr,"G").Offset(lr-sr)
End with
MRank = Application.CountIfs(LocRng, Location, MValRng, ">=" & MValue)
由于您没有说明
MValue
和Location
是什么,我假设您已经在其他地方定义了它们,并且它们正在按预期工作。这将包含Danny&JVDV的评论
在您的工作公式中,使用了整列,这使得计算/填充等所需的时间更长。在可能的情况下,使用精确、统一的范围是相当理想的 窃取您的工作代码来构建:
Application.WorksheetFunction.CountIfs(Sheets("Performance").Range("F:F"), Location, Sheets("Performance").Range("G:G"), ">=" & MValue)
分解这些,我会输入一些变量来设置范围:
Application.CountIfs(LocRng, Location, MValRng, ">=" & MValue)
使用变量帮助定义范围,例如:
sr = 3 'from example, starting row
lr = 1987 'from example, last row
With ws 'Danny's suggestion to post
set LocRng = .cells(sr,"F").Offset(lr-sr)
set MValRng = .cells(sr,"G").Offset(lr-sr)
End with
MRank = Application.CountIfs(LocRng, Location, MValRng, ">=" & MValue)
由于您没有显示
MValue
和Location
是什么,我假设您在其他地方定义了它们,并且它们按预期工作。像“COUNTIF”参数这样的公式期望相同大小的范围工作。另一件事。我认为您应该声明您的工作表:Dim ws as worksheet
设置变量set ws=
ActiveWorkbook.Sheets(“Performance”)`然后在代码行中使用ws.Range(ws.Cells(),ws.Cells())
而不是Range(Cells(),Cells())
。否则,Cells()
将被引用到ActiveSheet
,而不是您选择的单元格want@DannyPapadopulos因此,如果我使用上面的代码,我还必须做一个测试(“性能”)。在每次细胞引用之前?是的,很明显。或者您可以使用工作簿.Worksheet(“wsName”)将代码放在此处,使用.Cells
而不是Cells
,然后以结束。每次不引用某个对象时,默认情况下,它将被引用到活动对象,或者根本不起作用。类似“COUNTIF”参数的公式期望相同大小的范围起作用。另一件事。我认为您应该声明您的工作表:Dim ws as worksheet
设置变量set ws=
ActiveWorkbook.Sheets(“Performance”)`然后在代码行中使用ws.Range(ws.Cells(),ws.Cells())
而不是Range(Cells(),Cells())
。否则,Cells()
将被引用到ActiveSheet
,而不是您选择的单元格want@DannyPapadopulos因此,如果我使用上面的代码,我还必须做一个测试(“性能”)。在每次细胞引用之前?是的,很明显。或者您可以使用工作簿.Worksheet(“wsName”)
将代码放在此处,使用.Cells
而不是Cells
,然后以结束。每次不引用某个对象时,默认情况下该对象将被引用到活动对象,或者根本不工作