【问题标题】:Excel vba hide rows until valueExcel vba隐藏行直到值
【发布时间】:2016-06-04 01:14:18
【问题描述】:

我想在 Excel 中隐藏第 7 到 X 行,其中 X 是 A 列中第一个值实例上方的第 6 行。

Google 似乎想出了一些看起来对我来说太复杂的东西。

到目前为止,我所拥有的是基本的:

'Select Rows 7 through 3 rows before the first instance of any text in column A, then hides them
Rows("7:62").Select
' have to update the 62 above to look for text and hide based on that
Selection.Rows.Group
Selection.EntireRow.Hidden = True

在我的潜艇内。我只需要弄清楚如何将 62 更改为通常在 60 左右的可变单元格,但并不总是 62 的确切值。

【问题讨论】:

  • 你在谷歌上搜索什么?因为答案不应该是WAY WAY too complicated
  • 我认为您可以使用 Find 函数,然后使用该函数将您找到的单元格的值分配给它所在的行。此时您只需将该行减去 6然后用该变量替换“62”。
  • 我在 Excel 中的 VBA 生锈了,但我可能会做一些事情来找到其中包含值的单元格,使用行号作为变量,从中减去 6,然后在62 的地方。(我什至不知道我说的对你是否有意义,我很确定这不是最好的方法)。
  • A 列中是否有文字或数字(或者两者都有)?
  • 1) 对我来说太复杂了,我应该指定(我[我对 VBA 和宏很陌生)2)我不知道如何在上下文中使用“查找功能”宏。

标签: excel vba macros


【解决方案1】:

你的叙述说'上面第6行',你的代码说'前面3行'。我通常相信代码。这很重要,因为涉及到数学并确保您不会试图隐藏第 7 行上方的行。

Dim rw As Variant
rw = Application.Match(Chr(42), Range("A8:A1048576"), 0)
If Not IsError(rw) Then
    rw = Application.Max(rw + 4, 7)
    Range("A7:A" & rw).EntireRow.Hidden = True
End If

【讨论】:

  • 谢谢。和良好的皮卡。我对要显示为标题的内容犹豫不决。但我认为我可以在代码的上下文中进行调整。
【解决方案2】:

尽可能避免使用Select

strValueToFind = "What ever the value you are trying to find in column A is"
With Sheets("Sheet1")
    'Find the row containing the value
    intFoundRow = .Range("A:A").Find(What:= strValueToFind, _
        LookIn:=xlValues, _
        LookAt:=xlWhole).Row
    'Now hide Rows 7 through 6 above the row we found
    .Rows("7:" & intFoundRow - 6).Hidden = True
End With

希望这不是太复杂。 :)

【讨论】:

  • 谢谢!这样可行。有什么办法可以修改它以在 A 列中找到 ANY 文本的第一个实例?它通常是相同的值,但偶尔会略有不同。
  • 是的,有很多方法可以做到这一点。这是两个:strValueToFind = Sheets("Sheet1").Range("A1").Value 将找到您在单元格 A1 中键​​入的任何内容。您还可以创建一个带有 TextBox 控件的用户窗体,它将是 strValueToFind = UserForm1.TextBox1.Text
  • 有没有办法让它在 A 列中找到 ANY 值并将其设置为隐藏范围底部的锚点(或底部之前 x 个单元格的锚点) ?
  • ANY value in column A 表示第一行将始终成为第一个匹配项(即使是空白单元格也是一个值)。如果您的意思是在 A 列中找到第一个空单元格,请参阅this link。要找到第一个非空单元格,只需反转逻辑即可。例如If currentRowValue <> "" Then intFoundRow = CurrentRow
  • 是的,我的意思是我试图在 A 列中找到第一个非空白单元格,并将隐藏行的终点设置为关闭此值。
【解决方案3】:

假设我们从:

我们想要隐藏第一次出现的“幸福”上方的所有行 7 到 6 行。运行这个:

Sub FindAndHide()
    Dim rng As Range

    Set rng = Range("A:A")
    Range(Cells(7, 1), rng.Find(What:="happiness", after:=rng(7)).Offset(-6, 0)).EntireRow.Hidden = True
End Sub

将产生:

【讨论】:

    猜你喜欢
    • 2022-11-30
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多