1

テーブルにフィルターを適用すると、これを処理する方法についての私の理解が失われたようです。

複数の列を持つテーブルがあります。列の 1 つをフィ​​ルター処理し、別の列を並べ替えます。その後、フィルター処理された特定の列の最初の 10 行を別のテーブルに選択/コピーしたいと考えています。

フィルターの前にこれを簡単に行うことができました。フィルターが適用された後、最初の 10 行が必要です。フィルターの後で 10 行目を選択する方法がわかりません。

これを行う方法を説明している VBA リファレンスを教えてもらえますか? これを行うには SQL を使用する必要がありますか? 私はこれを考えすぎて複雑にしすぎていますか?

4

2 に答える 2

4

以下は、フィルタリングが適用された後、列 F の最初の 10 個の可視セルを選択するように機能します。ヘッダー セルを除外する場合は、F2 から開始する必要があります。

Sub TenVisible()
    Dim rng As Range
    Dim rngF As Range
    Dim rng10 As Range

    Set rngF = Range("F:F").SpecialCells(xlCellTypeVisible)

    For Each rng In Range("F:F")
        If Not Intersect(rng, rngF) Is Nothing Then
            If rng10 Is Nothing Then
                Set rng10 = rng
            Else
                Set rng10 = Union(rng10, rng)
            End If
            If rng10.Cells.Count = 10 Then Exit For
        End If
    Next rng
    Debug.Print rng10.Address
    '.. $F$1:$F$2,$F$4:$F$5,$F$9:$F$10,$F$12,$F$20:$F$21,$F$23
    rng10.Select
End Sub

UsedRange以下は、F2 から下に向かって選択するいくつかの方法の 1 つです (行 1 から始まると仮定します)。

Set rngF = Range("F2", Cells(ActiveSheet.UsedRange.Rows.Count, _
    Range("F2").Column)).SpecialCells(xlCellTypeVisible)
于 2013-09-09T22:25:02.067 に答える
0

価値があるのは、これがこの種の問題の最初の検索結果の1つであることを確認することです-
次のような名前付き列でテーブルをフィルタリングした後:

Worksheets("YourDataSheet").ListObjects("Table_Name").Range.AutoFilter _
  field:=Worksheets("YourDataSheet").ListObjects("Table_Name").ListColumns("ColumnName").Index, _
  Criteria1:="FilterFor..."

...次に、次を使用して、結果の単一の表示行を別のシートにコピーできました。

Worksheets("YourDataSheet").Range("Table_Name").SpecialCells(xlCellTypeVisible).Range("A1").EntireRow.Copy _
  Destination:=Range("AnotherSheet!$A$2").EntireRow

これは、フィルタリング後に表示される行を参照する 1 つの方法です。HTH。

于 2015-01-16T15:30:45.150 に答える