Excel: как удалить строки на основе отчета из второго файла - PullRequest
0 голосов
/ 30 октября 2018

У меня каверзный вопрос. У меня есть 2 файла, один из которых является моим мастер-файлом (назовем его файлом «A»), второй файл («B») содержит отчет об ошибке, в котором указано, какие строки из файла «A» являются недействительными.

File A = Master File
File B = Error Report
File C = Invalid file 

Вопрос: Итак, в файле B будет столбец, в котором указано, какие строки в файле A являются недействительными. Я пытаюсь удалить строки в файле A, указанные в столбцах файла B

.
**Example:**

File A
   A   
1  Diana
2  James
3  Dennis
4  Percy
5  Jake
6  Luis
7  Mark
8  Job
9  Rodrigo
10 Will

Мне нужны отдельные 3,5,8,10, вынуть их из файла A и создать файл C, где будут все недопустимые строки, таким образом, в моем файле A будут все строки с достоверной информацией.

 File B (Column A will say Rows) this is an error report from File A and column A shows the rows that are invalid in file A
       A    B
    1  3
    2  5
    3  8
    4  10
    5
    6
    7
    8
    9
    10

File C 
Will include the file with all the invalid data leaving File A with clean data
   A  
1  Dennis
2  Jake 
3  Job
4  Will
5
6
7
8
9
10

Любая помощь действительно ценится

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

@ Трейси Салазар: вместо создания отдельных файлов я создал отдельные листы, чтобы понять. Итак, исправьте имена и диапазоны листов, если необходимо, и попробуйте:

Sub Test()

    Dim LRB As Long
    Dim LRC As Long
    Dim i As Long
    Dim RowToDelete As Long

    With wsB
        LRB = .Cells(.Rows.Count, "A").End(xlUp).Row
        .Range("A2:A" & LRB).Sort _
        Key1:=Range("A1"), Order1:=xlDescending

        For i = 1 To LRB
            RowToDelete = .Range("A" & i).Value
            LRB = wsC.Cells(wsC.Rows.Count, "A").End(xlUp).Row
            wsA.Range("A" & RowToDelete).Copy wsC.Range("A" & LRB + 1)
           wsA.Rows(RowToDelete).Delete

        Next i
    End With

End Sub
0 голосов
/ 30 октября 2018

Это должно к подвоху:

Option Explicit

Dim wbA As Workbook, wbB As Workbook, wbC As Workbook
Dim wsA As Worksheet, wsB As Worksheet, wsC As Worksheet
Dim i As Long, x As Long, LastRow As Long
Dim ErrorRange As Range
Dim Cell As Variant

Sub Test()


Set wbA = Workbooks("Map1")
Set wbB = Workbooks("Map2")
Set wbC = Workbooks("Map3")
Set wsA = wbA.Sheets("Blad1")
Set wsB = wbB.Sheets("Blad1")
Set wsC = wbC.Sheets("Blad1")

'Assuming workbook B sheet 1, column A contains all invalid rows

With wsB
    LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
End With

Set ErrorRange = wsB.Range(wsB.Cells(1, 1), wsB.Cells(LastRow, 1))

i = 1
For Each Cell In ErrorRange
    x = Cell.Value
    wsC.Cells(i, 1).Value = wsA.Cells(x, 1).Value
    wsA.Cells(x, 1).ClearContents
    i = i + 1
Next Cell

End Sub
0 голосов
/ 30 октября 2018

Я только что создал образец VBA, который скопирует упомянутые строки в sheet2 из Sheet1 (MasterFile) и вставит в него sheet3 (ErrorSheet)

    Sub createErrorSheet()
    Dim errRange As Range

    Set errRange = Sheet2.Range("A1:A10")
    i = 1
    For Each cell In errRange
        Sheet1.Cells(cell.Value, 1).EntireRow.Copy Sheet3.Range("A" & i)
        i = i + 1
    Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...