Excel精英培训网

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

如何 用VBA 自动显示有效 行和列,空行列自动隐藏?

[复制链接]
发表于 2013-4-22 16:17 | 显示全部楼层 |阅读模式
本帖最后由 frankyzhe 于 2013-4-23 10:39 编辑

求教各位前辈,
                             问题:如何 自动隐藏 A2到A21中为空值的行和 C1到G1中为空值的列,并自动更新 显示 被隐藏的行和列中被改值后不为空值的行和列?

如下是我编写的 最新版 代码,目前功能【奇次触发A表单元格 隐/显 判断,偶次触发 整体恢复】
缺陷1: 不能 在 判断 A1 是否 改值 后, 触发功能
缺陷2: 还是之前的速度慢的问题:  显示判断时,当被隐藏的行 的来源数据源 更新数据后,需要被显示出来时,怎样才能不用从表头重新判断?
{细化问题: 1.如何判断 被改值的单元格 行号(x)?                       2.如何判断 被隐藏的行 的行号 (y)?
                      3.如何 当 X=Y 时,使 满足条件的行 取消隐藏?}            
希望哪位高手帮我 改一下代码,谢谢
  1. Public k
  2. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  3. Application.ScreenUpdating = False
  4. If Target.Count <> 1 Then Exit Sub
  5. If Target.Column <> 1 Then Exit Sub
  6. If Target.Row <> 1 Then Exit Sub
  7.     Call 隐显恢复
  8.     Cells(1, 2).Select
  9. Application.ScreenUpdating = True
  10. End Sub

  11. Sub 隐显恢复()
  12.     k = k + 1
  13.     If k > 10 Then
  14.         k = 1
  15.         Call 行列隐藏显示
  16.     Else
  17.         If k Mod 2 = 1 Then
  18.             Call 行列隐藏显示
  19.         Else
  20.             Call 恢复初始
  21.         End If
  22.     End If
  23. End Sub
  24. Sub 行列隐藏显示()
  25. Dim i As Integer
  26. Dim j As Integer
  27.     For i = 2 To 21
  28.         If Cells(i, 1).Value = "" Then
  29.             Cells(i, 1).EntireRow.Hidden = True
  30.         Else
  31.             Cells(i, 1).EntireRow.Hidden = False
  32.         End If
  33.     Next i
  34.     For j = 3 To 7
  35.         If Cells(1, j).Value = "" Then
  36.             Cells(1, j).EntireColumn.Hidden = True
  37.         Else
  38.             Cells(1, j).EntireColumn.Hidden = False
  39.         End If
  40.     Next j
  41. End Sub
  42. Sub 恢复初始()
  43. Dim i As Integer
  44. Dim j As Integer
  45.     For i = 3 To 7
  46.     Cells(1, i).Select
  47.     Selection.EntireColumn.Hidden = False
  48.     Next i
  49.     For j = 2 To 21
  50.     Cells(j, 1).Select
  51.     Selection.EntireRow.Hidden = False
  52.     Next j
  53. End Sub
复制代码
  1. Public arr(1 To 1, 1 To 1)
  2. Sub 集成功能()
  3. <span style="line-height: 1.5;">End Sub</span>
复制代码

条件隐藏与显示 触发单元格控制.zip

17.34 KB, 下载次数: 86

发表于 2013-4-22 17:50 | 显示全部楼层
行,列隐藏都是整行整行的隐藏,没有只隐藏某个单元格一说。
回复

使用道具 举报

发表于 2013-4-22 18:00 | 显示全部楼层
  1. Private Sub Worksheet_Activate()
  2.     Dim Rng As Range
  3.     Dim i As Integer
  4.    
  5.     For Each Rng In Range("B2:B20")
  6.         If Application.WorksheetFunction.CountA(Rng) = 0 Then
  7.             Rows(Rng.Row).EntireRow.Hidden = True
  8.         End If
  9.     Next
  10.    
  11.     For i = 4 To Range("H1").Column
  12.         If Application.WorksheetFunction.CountA(Columns(i)) = 0 Then
  13.             
  14.             Columns(i).EntireColumn.Hidden = True
  15.         End If
  16.     Next
  17. End Sub
复制代码
回复

使用道具 举报

发表于 2013-4-22 20:14 | 显示全部楼层
定位>空值>整行,整列 隐藏!!
回复

使用道具 举报

发表于 2013-4-23 08:29 | 显示全部楼层
Sub 自动隐藏DQ列无字行()
   ActiveSheet.Unprotect
   Application.ScreenUpdating = False '冻结屏幕,以防屏幕抖动
   For i = 61 To 210
   S1 = "D" & i
   S2 = "Q" & i
   'S2 = "Q" & i
   'S3 = ":"
   'S3 = S1 + S2
   'S4 = WorksheetFunction.Count(Range(S3))
   'If S1 = " " Or s2 = " " Then
   S3 = WorksheetFunction.Count(Range(S1))
   S4 = WorksheetFunction.Count(Range(S2))
   If S3 + S4 = 0 Then
   Rows(i).EntireRow.Hidden = True
   End If
   Next i
   Application.ScreenUpdating = True '冻结屏幕,此类语句一般成对使用
End Sub
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 06:00 , Processed in 0.453158 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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