excel如何使用vba代码取消隐藏行?

按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要输入,但不计算结果。

追答

答案又更新啦,快来瞅哇 (^-^)

温馨提示:答案为网友推荐,仅供参考
相似回答