如果两张纸上的两个字符串匹配
,我每次尝试按月值求和现在我没有看到它在无限循环中的任何地方,但仍然这个程序在一段时间后没有响应,我必须最终关闭excel via;任务管理器,因为即使{{1}}命令也无效。
这是一个相当简单的程序,但我不知道如何让它比这短。请指教。
{{1}}
感谢您的所有努力,但即使使用数组方法,如果您想查看File此处,也会处于非响应状态。
答案 0 :(得分:2)
此代码可能存在问题的原因有很多:
wk.Range("N900000").End(xlUp).Row
。Variants
。这使得调试非常困难。在你的评论中,你会问“这有必要吗?”。答:不重要,但它会将调试任务增加一个数量级,代码可能会以您不期望的方式工作。事实上,一个实际的答案是“是的,这是非常必要的”。Variants
,则运行Month(dt)
时代码将无法正确汇总。.Text
属性可能会导致问题。例如,如果日期列太窄并且单元格中有####,那么这将是.Text
值(如果您的变量是'未声明的'{{1},那么再次,您无法控制最好是Variant
或Cstr(cell.Value)
。另一点是,将数组写入工作表而不是一次只有一个单元格要快得多。在您的情况下,月聚合非常适合数组。因此,您可以使用一个来优化和缩短代码。下面的代码处理上述几点,并以数组为例。
你似乎还不清楚Noam Hacker提出的Cstr(cell.Value2)
建议。这是一个很好的建议,所以我在这段代码中给你了几个例子:
Debug.Print
答案 1 :(得分:1)
首先在列T(销售日期?)的右侧添加一列,其中包含公式=MONTH(T2)
,用于单元格 U2 。
将每月标签添加/更改为整数(B1:样本中的M1)。
然后创建动态命名范围:
SalesItemCol
,公式为=OFFSET(Sheet1!$N$1,1,0,COUNTA(Sheet1!$N:$N)-1,1)
SalesQtyCol
,公式为=OFFSET(Sheet1!$N$1,1,5,COUNTA(Sheet1!$N:$N)-1,1)
SalesMonthCol
,公式为=OFFSET(Sheet1!$N$1,1,7,COUNTA(Sheet1!$N:$N)-1,1)
最后在B2上,使用公式=SUMIFS(SalesQtyCol,SalesItemCol,$A2,SalesMonthCol,B$1)
然后自动填充其余部分。
或者您可以创建宏来执行上述操作...