|
本帖最后由 adadada 于 2013-9-29 22:14 编辑
Sub 取本月生日()
rw = [a65536].End(3).Row - 4 '获取数据表最大行位置,并减去前面4行
arr = [a5].Resize(rw, 13) '第5行开始的原始数据读入VBA内存数组arr (这样速度快效率高)
m = Month(Now()) '获取本月月份常量 (事先存入变量,比以后循环中反复计算Month(Now())效率高)
For i = 1 To rw '遍历数据表各行(数组的1-rw行,相当于实际工作表的第5行开始)
If IsDate(arr(i, 13)) Then '如果第13列M列是日期
If Month(arr(i, 13)) = m Then '并且该生日是本月
cnt = cnt + 1 '计数值+1
msgtxt = msgtxt & arr(i, 4) & vbTab & arr(i, 9) & vbTab & arr(i, 13) & vbCr
'合并有效数据,中间用Tab分隔,而不是用5个空格,这样可以自动对齐
End If
End If
Next
MsgBox "本月生日的有 " & cnt & "人:" & vbCr & msgtxt & "以上"
End Sub
本帖最后由 我心飞翔410 于 2013-9-29 22:14 编辑
循环判断是否满足条件 满足就就加一 cnt初始值为0 最后cnt得到的结果相当于统计满足条件的有多少个
你这两个if 可以用and
For i = 1 To rw
If IsDate(arr(i, 13)) and Month(arr(i, 13)) = m Then '如果第13列M列是日期
cnt = cnt + 1 '计数值+1
msgtxt = msgtxt & arr(i, 4) & vbTab & arr(i, 9) & vbTab & arr(i, 13) & vbCr
'合并有效数据,中间用Tab分隔,而不是用5个空格,这样可以自动对齐
End If
Next
|
|