Excel精英培训网

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

[已解决]求修改一个宏,谢谢,有图 有附件

[复制链接]
发表于 2013-1-6 08:12 | 显示全部楼层 |阅读模式
Sub 求和()
Dim i, k

k = Range("b65536").End(xlUp).Row

For i = Range("b65536").End(xlUp).Row To 1 Step -1

    If Cells(i, "t") = "" Then

        Cells(i, "t") = "=sum(t" & i + 1 & ":t" & k & ")"

        k = i - 1

    End If

Next
End Sub

上面的宏中的 t  想用inputbox 输入进去,我设置了半天没成功,望老手帮忙
最佳答案
2013-1-6 09:40
  1. Sub 求和()
  2.     Dim i, k, col$
  3.     k = Range("b65536").End(xlUp).Row
  4.     col = Application.InputBox("请输入列名[英文字母]:", , , , , , , 2)
  5.     On Error Resume Next
  6.     If Len(Cells(1, col).Address) = 0 Then MsgBox "列标错误,请重来": Err.Clear: Exit Sub
  7.     Application.ScreenUpdating = False
  8.     For i = Range("b65536").End(xlUp).Row To 1 Step -1
  9.         If Cells(i, col) = "" Then
  10.             Cells(i, col) = "=sum(" & col & i + 1 & ":" & col & k & ")"
  11.             k = i - 1
  12.         End If
  13.     Next
  14.     Application.ScreenUpdating = True
  15. End Sub
复制代码

图纸材料统计表-2012-12-18-1.zip

65.43 KB, 下载次数: 18

发表于 2013-1-6 09:27 | 显示全部楼层
你的意思是不是说求某一列,这里就是求T列。在这一列中的空格内填上,前面连续的非空的和?我是这样理解的,我重新写了段代码。
  1. Sub zhoucs00()
  2. Dim k As Integer, t As Integer, rng As Range, rg As Range
  3. k = Range("b65536").End(xlUp).Row + 1
  4. t = Application.InputBox("请输入数字", , , , , , , 1)
  5. Set rg = Cells(1, t)
  6. For Each rng In Range(Cells(1, t), Cells(k, t))
  7.     If Len(rng) = 0 Then
  8.         rng = Application.WorksheetFunction.Sum(Range(rg.Address, rng.Offset(-1, 0)))
  9.         Set rg = rng.Offset(1, 0)
  10.     End If
  11. Next rng
  12. End Sub
复制代码
图纸材料统计表-0106.rar (65 KB, 下载次数: 0)

评分

参与人数 1 +6 收起 理由
孤单无所谓 + 6 赞一个!我来给你打打气!

查看全部评分

回复

使用道具 举报

发表于 2013-1-6 09:34 | 显示全部楼层
本帖最后由 hwc2ycy 于 2013-1-6 09:37 编辑
  1. Sub 求和()
  2.     Dim i, k, col$
  3.     k = Range("b65536").End(xlUp).Row
  4.     col = Application.InputBox("请输入列名[英文字母]:", , , , , , , 2)
  5.     On Error Resume Next
  6.     If Len(Cells(1, col).Address) = 0 Then MsgBox "列标错误,请重来": Err.Clear: Exit Sub
  7.     For i = Range("b65536").End(xlUp).Row To 1 Step -1
  8.         If Cells(i, col) = "" Then
  9.             Cells(i, col) = "=sum(" & col & i + 1 & ":" & col & k & ")"
  10.             k = i - 1
  11.         End If
  12.     Next
  13. End Sub
复制代码
回复

使用道具 举报

发表于 2013-1-6 09:40 | 显示全部楼层
得加个关闭刷屏的代码才行,刷得太厉害了。
回复

使用道具 举报

发表于 2013-1-6 09:40 | 显示全部楼层    本楼为最佳答案   
  1. Sub 求和()
  2.     Dim i, k, col$
  3.     k = Range("b65536").End(xlUp).Row
  4.     col = Application.InputBox("请输入列名[英文字母]:", , , , , , , 2)
  5.     On Error Resume Next
  6.     If Len(Cells(1, col).Address) = 0 Then MsgBox "列标错误,请重来": Err.Clear: Exit Sub
  7.     Application.ScreenUpdating = False
  8.     For i = Range("b65536").End(xlUp).Row To 1 Step -1
  9.         If Cells(i, col) = "" Then
  10.             Cells(i, col) = "=sum(" & col & i + 1 & ":" & col & k & ")"
  11.             k = i - 1
  12.         End If
  13.     Next
  14.     Application.ScreenUpdating = True
  15. End Sub
复制代码
回复

使用道具 举报

发表于 2013-1-6 10:46 | 显示全部楼层
楼主,我给你写的代码,能满足你的条件不?回个话呀。至少让我心里也有个底。。。。
回复

使用道具 举报

 楼主| 发表于 2013-1-6 12:28 | 显示全部楼层
zhoucs00 发表于 2013-1-6 10:46
楼主,我给你写的代码,能满足你的条件不?回个话呀。至少让我心里也有个底。。。。

sorry
可以满足的

谢谢了

您费心了!!
回复

使用道具 举报

发表于 2013-1-6 14:39 | 显示全部楼层
kidd1217 发表于 2013-1-6 12:28
sorry
可以满足的

那就好。呵呵
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 14:31 , Processed in 0.958237 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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