Excel精英培训网

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

[已解决]求助“定位到指定单元格,并输入不规则求和公式进行运算”的VBA 代码

[复制链接]
发表于 2016-6-29 12:31 | 显示全部楼层 |阅读模式
求助“定位到指定单元格,并输入不规则求和公式进行运算”的VBA 代码

如附件:定位到“K3”单元格,输入不规则求和公式=SUM(J3:J4)                                                               
           再定位到“K5”单元格,输入不规则求和公式=SUM(J5:J7)                                                               
           再定位到“K8”单元格,输入不规则求和公式=SUM(J8:J16)                                                               
如此一直循环求和运算到“K247”单元格终止                                                                       
                                                                       
定位规律:        对应A列单元格=“[P]产品”的不为空值的K列单元格或 K列由K3开始打底色的不为空值的单元格                                                               
不规则求和公式:=一个[P]产品值+多个[D]材料值                                                                       


最佳答案
2016-6-30 16:41
本帖最后由 scl5801 于 2016-6-30 19:22 编辑
席可茵 发表于 2016-6-30 15:15
能把K列的结果值显示为公式吗?如K8单元格显示为“=SUM(J8:J16)”


Sub zj()
Dim arr, i%, x
r = Sheet1.Range("a65536").End(3).Row
arr = Sheet1.Range("a3:k" & r)
For i = UBound(arr) To 1 Step -1
     If arr(i, 1) Like "*产品*" Then
        arr(i, 11) = "=sum(j" & i + 2 & ":j" & i + 2 + x & ")"
         x = 0
    Else
        x = x + 1
     End If
Next i
[a3].Resize(UBound(arr), 11) = arr
End Sub
 楼主| 发表于 2016-6-29 12:32 | 显示全部楼层
补充附件

BOM 物料 计算.rar

16.46 KB, 下载次数: 16

回复

使用道具 举报

发表于 2016-6-29 12:45 | 显示全部楼层
=IF(G3="已审核",SUM(INDIRECT("J"&ROW()&":J"&IFERROR(MATCH($G$3,G4:G23,)+ROW()-1,4^8))),"")
用函數做一下。我是03版,沒有IFERROR.就不上傳附件了。
回复

使用道具 举报

发表于 2016-6-29 12:48 | 显示全部楼层
也許你也是03版。換個03版可以用的。
=IF(G3="已审核",SUM(INDIRECT("J"&ROW()&":J"&IF(ISERROR(MATCH($G$3,G4:G23,)),4^8,MATCH($G$3,G4:G23,)+ROW()-1))),"")

BOM 物料 计算.rar

19.2 KB, 下载次数: 15

回复

使用道具 举报

 楼主| 发表于 2016-6-29 15:15 | 显示全部楼层
谢谢!“心正意诚身修”你的教我的函数公式,这样也可以达到要求,不知道有没有更简单更直接的VBA代码能完,如用变量加上循环的简单代码使用宏完成。
回复

使用道具 举报

发表于 2016-6-29 17:39 | 显示全部楼层
席可茵 发表于 2016-6-29 15:15
谢谢!“心正意诚身修”你的教我的函数公式,这样也可以达到要求,不知道有没有更简单更直接的VBA代码能完, ...

Sub zj()
Dim arr, i%, j, x
arr = Sheet1.Range("a3:k" & Sheet1.Range("a65536").End(3).Row)
For i = 1 To UBound(arr)
   If arr(i, 1) <> "[P]产品" Then
      x = x + arr(i, 10)
   Else
      j = i
      x = 0
      x = x + arr(i, 10)
   End If
   arr(j, 11) = x
Next i
[A3].Resize(UBound(arr), 11) = arr
End Sub
回复

使用道具 举报

 楼主| 发表于 2016-6-30 09:13 | 显示全部楼层
scl5801 发表于 2016-6-29 17:39
Sub zj()
Dim arr, i%, j, x
arr = Sheet1.Range("a3:k" & Sheet1.Range("a65536").End(3).Row)

能把值改为公式显现吗?
回复

使用道具 举报

发表于 2016-6-30 09:49 | 显示全部楼层
本帖最后由 scl5801 于 2016-6-30 10:00 编辑
席可茵 发表于 2016-6-30 09:13
能把值改为公式显现吗?

借了“心正意诚身修”的公式,不过我不建议用公式显现,因为这样会影响表格的反应速度。
Sub zj()
Dim arr, i%, j, x
arr = Sheet1.Range("a3:k" & Sheet1.Range("a65536").End(3).Row)
For i = 1 To UBound(arr)
    If arr(i, 1) = "[P]产品" Then
      arr(i, 11) = "=IF(RC[-4]=""已审核"",SUM(INDIRECT(""J""&ROW()&"":J""&IF(ISERROR(MATCH(R3C7,R[1]C[-4]:R[20]C[-4],)),4^8,MATCH(R3C7,R[1]C[-4]:R[20]C[-4],)+ROW()-1))),"""")"
    End If
Next i
[A3].Resize(UBound(arr), 11) = arr
End Sub
回复

使用道具 举报

 楼主| 发表于 2016-6-30 11:30 | 显示全部楼层
scl5801 发表于 2016-6-30 09:49
借了“心正意诚身修”的公式,不过我不建议用公式显现,因为这样会影响表格的反应速度。
Sub zj()
Dim ...

我原J列的公式可以不动吗,然后K列的显示为求各和公式,如K3单元格显示公式“=SUM(J3:J4)”、如K5单元显示公式 “=SUM(J5:J7)”、如K8单元显示公式 “=SUM(J8:J16)”、
回复

使用道具 举报

发表于 2016-6-30 15:00 | 显示全部楼层
Sub add()
For Each Rng In Range("a:a")
  If Rng = "[P]产品" Then
    t = Rng.Row
    Cells(Rng.Row, "k") = Cells(Rng.Row, "j")
    Do
      t = t + 1
      If (Cells(t, 1) = "[P]产品") Then Exit Do
      If (Cells(t, 1) = "") Then Exit Do
      Cells(Rng.Row, "k") = Cells(Rng.Row, "k") + Cells(t, "j")
    Loop
  End If
Next
End Sub
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 06:21 , Processed in 0.387491 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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