10

10行のデータがあるとします。データにフィルターを適用すると、行番号7と9がフィルターされる か表示され ます

データ(10行)をループして、表示されている行(つまり、範囲C7と範囲C9)についてのみ、空白の列(列Cを想定)に文字列「IsVisible」を出力したいと思います。

4

3 に答える 3

26

非表示にする最初の10行のいくつかを選択してから、これを実行してみてください

Option Explicit

Sub CheckIfVisible()

Dim i As Integer, x As Integer
x = 0
For i = 1 To 10
    With Excel.ThisWorkbook.ActiveSheet
        If .Rows(i).EntireRow.Hidden Then
        Else
            .Cells(15 + x, 1) = "Row " & i & "is visible"
            x = x + 1
        End If
    End With
Next i

End Sub

これはあなたが探している種類のループですか?
たぶん、あなたは私たちにあなたのループを見せて、あなたの問題がどこにあるかを見ることができますか?

于 2013-01-05T16:34:20.587 に答える
0

私はしばらく前にこれを探してここに来たので、これは将来のグーグルに役立つかもしれない何かです。

セル/行ごとに実行している場合は、セル.EntireRow.Hiddenboolに直接アクセスできます。

以下の例では、これは選択範囲内の各セルを通るForEachループであり、そのセル内のプロパティのみを読み取り、.HiddenがTrue/Falseであることに基づいてカウント/カラーリングします。

注意すべき落とし穴の可能性..

フィルタリングされた範囲をテストする場合は、範囲の最後から2番目/最後の行にある場合は非表示の行をキャプチャできない可能性があるため、範囲を超えて行を選択する必要があります。最初に表示される行を選択します。選択後はこれを回避します。

広い範囲(10,000 +行)では非常に非効率になります

テストしたい場合はCopyPasta



Sub HowManyHiddenCells()

Dim MyCell, MyRange As Range
Dim CellCountAll, CellCountVisible, CellCountHidden As Integer

Set MyRange = Selection



For Each MyCell In MyRange

    ':: IGNORE EMPTY ::
    If Len(MyCell.text) > 0 Then

        If MyCell.EntireRow.Hidden Then
        MyCell.Interior.Color = RGB(255, 220, 200)
        ':: Count of hidden cells in range
        CellCountHidden = CellCountHidden + 1
        ':: Do Column C Text! ::
        MyCell.Offset(0, 2).FormulaR1C1 = "I was hidden! "
        End If
    
        If MyCell.EntireRow.Hidden = False Then
        MyCell.Interior.Color = RGB(200, 255, 180)
        ':: Count of visible cells in range
        CellCountVisible = CellCountVisible + 1
        End If
        ':: Count of all cells in range
        CellCountAll = CellCountAll + 1
    End If
Next MyCell


MsgBox "Cells total " & CellCountAll & vbNewLine & "Hidden :  " & CellCountHidden & vbNewLine & "Visible : " & CellCountVisible, vbOKOnly + vbInformation, "Count of hidden vs visible"

End Sub

実行中のスクリプトの例-フィルターされた範囲で、非表示を赤で強調表示

于 2020-05-27T23:40:44.160 に答える
-1

@whytheqに触発されて私はこれを思いついたので、選択範囲内のすべての表示行をループします:

Sub Loop_through_selected_rows()
Dim rng As Range: Set rng = ActiveWindow.RangeSelection
Dim i As Integer
For i = 0 To rng.Rows.Count - 1
    If Cells(rng.Row + i, 1).EntireRow.Hidden Then
    Else
        Cells(rng.Row + i, 1).Range("A1:E1").Select 'Set Range within row to your needs
        ' Do something here
    End If
Next
End Sub
于 2020-05-14T19:43:59.437 に答える