Как удалить строки ниже последней строки, содержащей указанную строку (последнее совпадение)?по VBA - PullRequest
0 голосов
/ 25 ноября 2018

Привет. Я ищу и пытаюсь объединить несколько кодов VBA, чтобы решить мою проблему, но пока не удалось.Что я хочу сделать, это искать конкретные слова в столбце (то есть «XxX» это просто часть этой ячейки) и найти последнее совпадение, а также удалить строки ниже этой строки с помощью VBA.У меня 278 текстовых файлов нужно конвертировать в xlsx для применения этого в пакетном режиме.Я добавляю пример, так что, возможно, я объясню лучше.

Ağ Teknolojileri Elemanı
Network Technologies Personnel
(Level 5)
12UY0046-5/A1
Occupational Health and Safety, Quality, Work Organization and Professional Development
XxX Explains OHS measures.
XxX Explains environment protection measures.
XxX Defines quality applications.
XxX Explains how to make work organization.
XxX Defines activities needed to be carried out for professional development.
12UY0046-5/A2
Basis of Computer Hardware and Software
XxX Explains the operating logic of the computer.
XxX Explains basic computer use.
XxX Explains the working principles of computer energy hardwares.
XxX Describes the basic features of computer components.
df
fsd
s
gfd
gdfg
dfs
fd

Примечание: все в столбце "A".

Для этого примера я хочу, чтобы код VBA нашел последнийЯчейка, которая содержит «XxX» (XxX Описывает основные функции компьютерных компонентов.) и удаляет все строки ниже этой строки.

Я не знаю, смогу ли я сделать это для текстовых файлов.Но тем не менее я не мог найти способ сделать это для текстовых файлов, мне нужно изменить эти текстовые файлы в xlsx.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Попробуйте:

Option Explicit
Sub delAfter()
    Const sFind As String = "XxX"
    Dim WS As Worksheet, R As Range

'Find last sFind
Set WS = Worksheets("sheet2") 'or ActiveSheet or whatever
With WS.Cells
    Set R = .Find(what:=sFind, _
         after:=.Item(1, 1), _
         LookIn:=xlValues, _
         lookat:=xlPart, _
         searchorder:=xlByRows, _
         searchdirection:=xlPrevious, _
         MatchCase:=True)
    If Not R Is Nothing Then
        Set R = WS.Range(R.Offset(1, 0), .Cells(.Rows.Count, R.Column).End(xlUp))
        R.EntireRow.Delete 'deletes entire row.  If just want a single column, adjust
    End If
End With

End Sub

Удаляет целые строки после нахождения последней XxX.Если вы изучите код, вы увидите, что мы начинаем с первой строки, но поисковый порядок xlprevious, поэтому мы будем искать снизу.

Если вам нужно ограничить его конкретным столбцом, просто изменитеДиапазон поиска.

0 голосов
/ 25 ноября 2018

Ok,

Этот код должен работать для строк, содержащих XxX в столбцах a

Option Explicit

Sub Delete()

Dim wb As Workbook
Dim ws As Worksheet
Dim Lastrow As Long, i As Long, RowNum As Long
Dim str As String
Dim r As Range, Cell As Range

Set wb = ThisWorkbook
Set ws = wb.Sheets("Blad1")

str = "XxX"

Lastrow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Set r = ws.Range(ws.Cells(1, 1), ws.Cells(Lastrow, 1))

For Each Cell In r
    If Cell.Value Like "*" & str & "*" Then
        i = Cell.Row
        Exit For
    End If
Next Cell

For RowNum = i + 1 To Lastrow
    ws.Rows(i + 1).Delete
Next RowNum


End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...