Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2201|回复: 3

[已解决]VBA运用函数问题

[复制链接]
发表于 2015-8-13 20:27 | 显示全部楼层 |阅读模式
如果用VBA代码来表达附件所示的函数问题,我自己写了一段代码但是达不到我想要的效果,请各位老师指点一下。谢谢!
最佳答案
2015-8-13 21:19
Sub a()
    Dim x As Integer
    For x = 6 To 30
        Cells(x, "e") = Application.Evaluate("sumproduct(g4:p4,g" & x & ":p" & x & ") * (c" & x & " +1)")
    Next
End Sub



原因1
=SUMPRODUCT($G$4:$P$4,G6:P6)*(C:C+1)
每次循环时,蓝色部分并不像工作表函数(自动转换转换成该行C列的值)。

原因2
每次循环时,公式里的相对引用未起作用,也就是说相当于是固定引用。

解决办法:
将每次循环时,要改变的行数,用循环变量x替代。

列子.rar

8.57 KB, 下载次数: 13

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-8-13 21:19 | 显示全部楼层    本楼为最佳答案   
Sub a()
    Dim x As Integer
    For x = 6 To 30
        Cells(x, "e") = Application.Evaluate("sumproduct(g4:p4,g" & x & ":p" & x & ") * (c" & x & " +1)")
    Next
End Sub



原因1
=SUMPRODUCT($G$4:$P$4,G6:P6)*(C:C+1)
每次循环时,蓝色部分并不像工作表函数(自动转换转换成该行C列的值)。

原因2
每次循环时,公式里的相对引用未起作用,也就是说相当于是固定引用。

解决办法:
将每次循环时,要改变的行数,用循环变量x替代。
回复

使用道具 举报

发表于 2015-8-13 21:36 | 显示全部楼层
Sub a()
      Dim x As Integer
          For x = 6 To 30
          s = 0
            For y = 7 To 16
                s = s + Cells(x, y) * Cells(4, y) * (Cells(x, 3) + 1)
            Next
             Cells(x, "e") = s
          Next
End Sub

评分

参与人数 1 +6 金币 +6 收起 理由
爱疯 + 6 + 6 方便新人学习

查看全部评分

回复

使用道具 举报

发表于 2015-8-14 15:24 | 显示全部楼层
如果要用VBA,应以VBA的思路处理,比如3楼那样。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 18:36 , Processed in 0.311854 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表