【问题标题】:if and counifs looping through 2500 rowsif 和 countifs 循环遍历 2500 行
【发布时间】:2020-05-25 07:12:31
【问题描述】:

调试代码错误后,粗体线以黄色突出显示。运行时错误'91'。我是 VBA 新手,因此需要有关如何在单个命令按钮上编写这些公式并在 P、Q、R 列中获取结果的帮助。公式应该遍历所有 2500 行吗? 公式是

IF(E2="",0,2)
IF(F2="",0,COUNTIFS(A:A,A2,E:E,F2))
(COUNTIFS(A:A,A2,E:E,E2))-1
Private Sub CommandButton1_Click()

  Dim sh As Worksheet, lastRow As Long
   **lastRow = sh.Range("F" & Rows.Count).End(xlUp).Row**
   sh.Range("P2:P" & lastRow).Formula = "=IF(E2="""",0,2)"
   sh.Range("Q2:Q" & lastRow).Formula = "=IF(F2="""",0,COUNTIFS(A:A,A2,E:E,F2))"
   sh.Range("R2:R" & lastRow).Formula = "=(COUNTIFS(A:A,A2,E:E,E2))-1"

End Sub

I want the formula to work on click of button
The image shows the error 


How to solve it?


  [1]: https://i.stack.imgur.com/Vue2U.jpg

【问题讨论】:

  • 那么,每一个这样的公式都应该写在那三列中?首先是PP,然后是Q:Q等等?讨论中的所有列是否具有相同的行数,等于 A:A 中的行数?
  • 第一个公式将应用于 P 第二个 Q 和第三个列 R。是的所有列的行数相同
  • 我的回答没有回答你的问题?
  • 你测试了我的答案代码吗?尝试使用时请刷新页面...

标签: excel vba loops excel-formula


【解决方案1】:

假设讨论中的所有五个(包括 F:F、E:E)列具有相同的行数,请尝试此代码。不需要任何循环...

Sub FormulaOnThreeRanges()
  Dim sh As Worksheet, lastRow As Long
   Set sh = ActiveSheet 'use here your sheet
   lastRow = sh.Range("F" & Rows.count).End(xlUp).Row
   sh.Range("P2:P" & lastRow).Formula = "=IF(E2="""",0,2)"
   sh.Range("Q2:Q" & lastRow).Formula = "=IF(F2="""",0,COUNTIFS(A:A,A2,E:E,F2))"
   sh.Range("R2:R" & lastRow).Formula = "=(COUNTIFS(A:A,A2,E:E,E2))-1"
End Sub

【讨论】:

  • 友情提示:认为您忽略了将代码片段sh.Range("F" & Rows.count).End(xlUp).Row 分配给lastRow :-)
  • @T.M.:我不会那样说...因为他的公式引用列 E:E 和 F:F,其中一个应该足够好。您认为哪个范围更合适?
  • 没有检查正确的列,但是语法:假设您收到一个独立行的编译错误,例如 sh.Range("F" & Rows.count).End(xlUp).Row :-;
  • @T.M.: Ups...直到现在我才明白你的意思。我错过了在那里计算的lastRow。谢谢!代码看起来很简单,我没有测试它,我确信它不会错...更正了代码。
  • 请帮助运行时错误'91'对象变量或未设置对象变量
猜你喜欢
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
相关资源
最近更新 更多