0

私のコードは、TextBox1 からファイル名を取得し、そのファイルを開き、列 B のすべての一意の値にインデックスを付けます。次に、2 番目のファイル、TextBox2 のファイル名を取得し、最初のファイルの現在のインデックスに基づいてフィルター処理します。次に、フィルター処理された結果を取得して、新しいワークブックのシートにコピーします。次に、新しいワークブックに新しいシートが生成され、次のフィルター処理された結果が貼り付けられます。

私の問題は、多くのデータ行があり、何らかの理由でフィルター処理されたデータが何度も繰り返されても選択されないことです。私のプログラムは、開始時にフィルター処理されたすべてのデータを選択しますが、ある時点で、表示されているすべてのセルではなくヘッダーの選択を開始します。何か不足している場合、または簡単な回避策がある場合はお知らせください。ありがとうございました。

Sub NewFileGenerate()
Dim I As Integer
Dim N As Integer
Dim X As Integer
Dim IndexedCell As String

X = 1

Windows(TextBox1.Value).Activate
'Need to count only populated cells
I = Sheets(1).Columns(2).Cells.SpecialCells(xlCellTypeConstants).Count
Set Newbook = Workbooks.Add
For N = 2 To I - 1
    Application.CutCopyMode = True

    Windows(TextBox1.Value).Activate
    IndexedCell = Cells(N, 2).Value
    Windows(TextBox2.Value).Activate
    With Sheets(1)
        With .Range("A1", "Z" & I - 1)
            .AutoFilter Field:=5, Criteria1:=IndexedContract
            .SpecialCells(xlCellTypeVisible).Copy
        End With
    End With
    Newbook.Activate
    ActiveSheet.Paste Destination:=Sheets(X).Range("A1:Z1")
    Cells.Select
    Selection.Font.Size = 10
    Cells.EntireColumn.AutoFit
    Cells.Select
    X = X + 1
    If X > 3 Then
        Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Sheet" & X
    End If
    Application.CutCopyMode = False

Next N

End Sub
4

1 に答える 1

1

ソース ワークシート (textbox2.value) には、インデックス ワークシート (textbox1.value) よりも多くの行があると思います。インデックス ワークシートの行数に等しい I を設定し、その数の行のみを使用するようにオートフィルターに指示します。「With .Range("A1", "Z" & I - 1)」という行を変更して、ソース ワークシートのすべての行を取得する必要があります。

于 2015-03-07T16:28:03.150 に答える