【问题标题】:How to create loop for hidden rows from different locations and specific criteria?如何为来自不同位置和特定条件的隐藏行创建循环?
【发布时间】:2021-10-22 07:36:28
【问题描述】:

很难将它变成一个循环。我不知道做循环。

我需要创建一个循环,如果我选择“高”或“低”,那么指示高或低的状态将被取消隐藏。

因此,如果我选择“高”,则只有指示“高”的状态才会被隐藏。指示“低”的状态将被隐藏。 反之亦然。

我已经为所涉及的范围提供了名称,每个州将有一个名称。

每个状态的高位和低位指示器位于不同的位置,例如下面的代码。

我只是使用了 If 语句,因为我真的不知道其他方式。

If Range("H9").Value = "High" Then         'where I select either High or Low'
    If Range("Q74").Value = "High" Then    'location of indicator for AL state'
        Range("AL").EntireRow.Hidden = False   'rows associated with the state'
    Else
        If Range("Q99").Value = "High" Then
            Range("AK").EntireRow.Hidden = False
        Else
            If Range("Q124").Value = "High" Then
                Range("AZ").EntireRow.Hidden = False
            Else
                If Range("Q149").Value = "High" Then
                    Range("AR").EntireRow.Hidden = False
                Else
                    If Range("Q174").Value = "High" Then
                        Range("CA").EntireRow.Hidden = False
                    End If
                End If
            End If
        End If
    End If
Else
    If Range("H9").Value = "Low" Then
        If Range("Q74").Value = "Low" Then
            Range("AL").EntireRow.Hidden = False
        Else
            If Range("Q99").Value = "Low" Then
                Range("AK").EntireRow.Hidden = False
            Else
                If Range("Q124").Value = "Low" Then
                    Range("AZ").EntireRow.Hidden = False
                Else
                    If Range("Q149").Value = "Low" Then
                        Range("AR").EntireRow.Hidden = False
                    Else
                        If Range("Q174").Value = "Low" Then
                            Range("CA").EntireRow.Hidden = False
                        End If
                    End If
                End If
            End If
        End If
    End If
End If

样本数据: [![选择指标][1]][1] [![样本状态1][2]][2] [![样本状态2][3]][3]

这里是我选择指标的地方: [1]:https://i.stack.imgur.com/Xy3oB.png

这里是需要隐藏或不隐藏的示例状态,实际上有 4 个指标,High、Moderate、Low 和 None。 [2]:https://i.stack.imgur.com/Uhur0.png [3]:https://i.stack.imgur.com/qwUpf.png

而且每个状态都是相互独立的,指标也会根据给定的数据而变化。

【问题讨论】:

  • 我不确定您的If ... else 结构是否符合您对需求的描述。如果 H9 是“高”而 Q74 不是“高”,甚至不检查 Q99、Q124、Q149 等是否正确?
  • 你运行代码了吗? Range("AL").EntireRow.Hidden = False 应该抛出一个错误。 Range("AL") 引用列 --> 然后 EntireRow 列引用整个工作表...您会看到问题:如果隐藏所有整行,工作表将没有任何可见行。
  • 此外,如果您向我们展示您的数据将会对我们有所帮助
  • Range("AL") 是范围的名称。
  • 你不需要 If/Endifs。您可以进行布尔比较。例如Range("AL").EntireRow.Hidden = ((Range("H9").Value = Range("Q74").Value) = (Range("H9").Value = "High")) 对其他人也是如此:) 所有这些代码都将减少到大约。 10 行。

标签: excel vba loops


【解决方案1】:

我会使用配置数组并对其进行迭代。 如果您在工作表上有一个包含所有国家/地区(具有相应范围)的列表,那么您可以使用它来填写 arrConfig。

只要 Range("H9") 发生变化,您就会调用 sub 并提供新值作为参数。

编辑:期望每个风险单元的名称具有命名约定 risk_[Countrycode],例如risk_AL、risk_AK 等。

Sub hideShowCountries(checkValue As String)

Dim ws As Worksheet: Set ws = ActiveSheet   'adjust to your needs

Dim arrConfig(2) As String
arrConfig(0) = "AL"
arrConfig(1) = "AK"
arrConfig(2) = "AZ"
'extend this list to your needs

Dim rgCountry As Range, strRisk As String
Dim i As Long

For i = 0 To UBound(arrConfig)
    With ws
        Set rgCountry = .Range(arrConfig(i))
        'strRisk = getRiskForCountry(rgCountry)
        strRisk = .range("risk_" & arrConfig(i))
    End With
    
    rgCountry.EntireRow.Hidden = CBool(strRisk <> checkValue)
Next

End Sub


Private Function getRiskForCountry(rgCountry As Range) As String
getRiskForCountry = rgCountry.Cells(1, 1).value 'adjust this to your needs
End Function

【讨论】:

  • 如何针对不同的单元格位置调整这部分? Private Function getRiskForCountry(rgCountry As Range) As String getRiskForCountry = rgCountry.Cells(1, 1) 'adjust this to your needs End Function
  • 如果您有您的国家范围 - 风险字段包括在哪里?没有照片我不能告诉你
  • 它是屏幕截图中以黄色突出显示的那个。
  • 你必须计算从 B55 到第 75 行 (?) 的偏移量和到 Q 列的偏移量。那么 getriskForCountry 应该是 rgCountry.Cells(offsetRows, offsetColumns)
  • 那么这个逻辑不起作用,您必须将相应的单元格放入 arrConfig - 将其扩展到二维数组,如arrConfig(0,0) = "AL": arrConfig(1,0) = "Q74"
猜你喜欢
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 2021-12-11
  • 2020-12-09
相关资源
最近更新 更多