按100行(或更多行)做成一个表格,当只有7行数据时,9到100行进行隐藏,如果在第8行输入字符时,第9行自动取消隐藏;在第9行输入字符时第10行自动取消隐藏,以此类推向下都这样,如何实现。
以填写数据的区域B5:G99为例。
1、按Alt+F11打开代码编辑器。
2、在左侧栏中双击需要添加代码的工作表。
3、在右侧输入或粘贴代码。
4、如图,你只修改两个参数即可,其他代码不用动。
5、改好后关闭代码编辑器即可。
Private Sub Worksheet_Change(ByVal Target As Range) '值变更时触发事件
'***************************************************************
Dim s As Range, c$, r&
Set s = Range("B5:G99") '请修改此参数,日常填写数据的区域
r = 100 '请修改此参数,合计结果输出的行号
c = "B/C/D/G" '不求和的列号字母,若有多个,请用/分隔
'***************************************************************
'显隐处理
Dim g As Range, ir&
Set g = s.Find("*", , , , , xlPrevious)
If g Is Nothing Then
ir = s(1).Row
Else
ir = WorksheetFunction.Min(s(s.Count).Row, g.Row + 1)
End If
Rows(s(1).Row & ":" & ir).Hidden = False '上部分,全部设为显示
If ir < s(s.Count).Row Then
Rows(ir + 1 & ":" & s(s.Count).Row).Hidden = True '下部分全部设为隐藏
End If '可修改此参数,合计结果写到第几行
'退出机制
Set g = Intersect(Target, s)
If g Is Nothing Then Exit Sub '如果目标不在s区域内,则直接退出sub
'合计处理
Dim m&, n&
m = s(1).Row '获取s区域的起始行号
n = s(s.Count).Row - m + 1 '获取s区域的总行数
Application.EnableEvents = False '关闭事件触发
Dim i%, h$
c = "/" & c & "/" '在c的两端补全斜杠
For i = g(1).Column To g(g.Count).Column '遍历g所涉及到的列
h = Replace(Cells(1, i).Address(0, 0), "1", "") '计算当前列号字母
If InStr(c, "/" & h & "/") = 0 Then '如果h不包含在c中
Cells(r, i) = WorksheetFunction.Sum(Cells(m, i).Resize(n)) '输出合计
End If
Next
Application.EnableEvents = True '开启事件触发
End Sub
追问上方有4行标题,左侧有一列序列
追答答案已更新。
追问您好!还有点小修改,麻烦能反代码再改一下,现在是从B列开始合计上面的,因表格数据不一样,能否修改为从D列或是E列开始合计结果,后面可以修改从哪一列合计。
追答你仔细看我那张图片,上面用粉红色的画出来的框里面,有两个参数是可以修改的呀。
追问就是B列输入数据或文字,但不需要计算,上面把B5改成D5后,在A到C列输入时就不会隐藏和取消隐藏了。有时A到C要输入,但不计算结果。
追答答案又更新啦,快来瞅哇 (^-^)