Office中国论坛/Access中国论坛

标题: 请教:能否把阵列公式改为编程 [打印本页]

作者: lxq2005    时间: 2006-9-23 00:54
标题: 请教:能否把阵列公式改为编程
请教各位大侠,能否把以下阵列公式改为编程:

{=SUM(IF(MONTH(入库登记!$C$2C$10)=MONTH(汇总!$B$2),IF(入库登记!$D$2D$10=汇总!A4,入库登记!$E$2E$10)))}

thanks

[此贴子已经被作者于2006-9-22 17:01:29编辑过]


作者: 老鬼    时间: 2006-9-23 05:34
用双重循环
作者: lxq2005    时间: 2006-9-24 17:58
[attach]20532[/attach]


谢谢鬼主的提示,但现在我对excel for VBA不熟悉,昨天试了一天,运行后无任何反应,

请鬼主及各位大侠再帮我看看宏,该怎么修改.

thanks

[此贴子已经被作者于2006-9-24 9:59:17编辑过]


作者: 老鬼    时间: 2006-9-24 20:33
看你的表格,好像你只是想把公式自动插进入而已,那就用下面的代码吧

i = 0
    For Each CEL In Range("A4", Range("A4").End(xlDown))
        CEL.Offset(0, 1).FormulaArray = "=SUM((MONTH(入库登记!$C$2C$10)=MONTH(汇总!$B$2))*(入库登记!$D$2D$10=汇总!A" & (4 + i) & ")*(入库登记!$E$2E$10))"
        i = i + 1
    Next
作者: lxq2005    时间: 2006-9-24 21:37
鬼主辛苦了,我现在想知道的是不用插入公式,而是用你说的双重循环要怎样才能实现,希望鬼主不要嫌我麻烦,再次感谢鬼主.

[此贴子已经被作者于2006-9-24 16:48:27编辑过]


作者: 老鬼    时间: 2006-9-25 03:19
双重循环效率会差点,方法如下:

Dim sumValue
Dim cel, cel2
    For Each cel In Range("A4", Range("A4").End(xlDown))
        sumValue = 0
        For Each cel2 In Sheets("入库登记").Range("D1", Sheets("入库登记").Range("D1").End(xlDown))
            If cel2.Value = cel.Value Then
                If Month(cel2.Offset(0, -1).Value) = Month(Range("b2")) Then
                    sumValue = cel2.Offset(0, 1).Value + sumValue
                End If
            End If
        Next
        cel.Offset(0, 1).Value = sumValue
    Next

另外提供不需双重循环的方法,程序比较简短:

i = 0
    For Each cel In Range("A4", Range("A4").End(xlDown))
        cel.Offset(0, 1).Value = Evaluate("=SUM((MONTH(入库登记!$C$2C$10)=MONTH(汇总!$B$2))*(入库登记!$D$2D$10=汇总!A" & (4 + i) & ")*(入库登记!$E$2E$10))")
        i = i + 1
    Next
作者: lxq2005    时间: 2006-9-25 16:08
十分感谢鬼主提供了两种方法并进行了比较,也十分感谢这个学习交流的平台,学以致用是最好的学习方法,在以后的学习过程中我也会以自己学到的东西来帮助别人.




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3