Excel宏以查找范围中的日期,然后计算相邻列中的下一个值更改

时间:2017-03-03 20:21:57

标签: excel excel-vba excel-formula range vba

我正在尝试编写一个宏来查找每年2月2日的A列,然后计算行数(天),直到B列中的值发生变化。此计数可以放在新列C列中,但与2月2日相同的行相关,在本例中为第3行。

使用下面的表格输出到C3将是5.我不计算2月2日那天,但我计算更改发生的那一天。这是我需要经历的100多年。

id |      A     |  B  |  C  
----------------------------
 1 | 1946/01/31 |  0  |  
 2 | 1946/02/01 |  0  |
 3 | 1946/02/02 |  0  |
 4 | 1946/02/03 |  0  |
 5 | 1946/02/04 |  0  |
 6 | 1946/02/05 |  0  |
 7 | 1946/02/06 |  0  |
 8 | 1946/02/07 |  2  |
 9 | 1946/02/08 |  0  |

1 个答案:

答案 0 :(得分:0)

真正的挑战是用公式来做。好吧,2个公式。

screenshot

单元格E2中的第一个公式通过在B列的文本末尾查找“02/02”找到2月2日的日期,如果找到它,则将C2的内容放在该单元格中。如果没有找到,它会将C1与D1,上面的2个单元格进行比较,看它们是否相同,因为之前找到了匹配,如果是,则需要上面的单元格内容。这导致您可以在2月2日和C列更改点之间的E列中看到零。

E2的公式,然后自动填充到数据末尾

=IF(AND(MONTH(B2)=2,DAY(B2)=2),C1,IF(AND(E1<>"",E1=C1),E1,""))

现在我们需要做的就是通过查找D列AND(E1="",E2<>"")中的第一个非空白单元格来计算D列中的单元格,然后计算与该单元格匹配的所有单元格。我不确定你期望找到什么差距,但你可以改变200以确保你数一切。最后一部分是拿走1,这样第二个feb行就不计算了。

D2的公式,然后自动填充到数据末尾

=if(AND(E1="",E2<>""),countif(E2:E200,E2)-1,"")