Скопировать, вставить цикл на основе уровня отступа - PullRequest
0 голосов
/ 08 октября 2019

Я не могу понять, как заставить цикл проходить через набор данных на основе уровня отступа каждой ячейки.

Пожалуйста, смотрите прикрепленную фотографию того, как должен выглядеть результат. Нажмите здесь У меня есть исходный столбец с данными (столбец A). Эти данные имеют несколько жирных заголовков с уровнем отступа 0. Для меня эти значения бесполезны, они просто используются для того, чтобы сделать данные более понятными. Поэтому мы можем их игнорировать.

Я бы хотел просмотреть данные в столбце A, скопировать и вставить в столбец B значение, которое имеет уровень отступа 1 и не имеет префикса внутри "|"символов.

В столбце C я хотел бы перебрать данные, скопировать и вставить данные в столбец A, у которого уровень отступа равен единице И префикс | TE |, но я также хотел бы удалитьпрефикс и сбросить уровень отступа до 0.

В столбце D я хотел бы просмотреть данные, скопировать и вставить данные в столбец A с уровнем отступа, равным единице И префикс | Sub|, снова удаляя префикс и сбрасывая уровень отступа до 0.

В конечном итоге эти данные будут разделяться на вкладки, но если я смогу разобраться в синтаксисе уровня отступа, думаю, я смогу получить его оттуда.

Любая помощь будет оценена. Спасибо

Sub FindData()

Dim LastRow As Integer
Dim i As Integer

Sheets("Sheet1").Range("B1:B50").ClearContents

LastRow = Sheets("Sheet1").Range("A1000").End(xlUp).Row


For i = 1 To LastRow
    If Cells(i, 1) = ActiveCell.IndentLevel = 0 Then
    Cells(i, 1).Copy _
    Range("B10").End(xlUp).Offset(1, 0)

    End If

Next i

End Sub

1 Ответ

0 голосов
/ 09 октября 2019

Может быть комбинация чего-то вроде ниже? Я предполагаю, что у вас есть заголовки, хотя на вашей фотографии их нет. Вы также можете переместить pr ( вставить строку ) вне этого в UDF.

Sub FindData()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Concur") '<-- Update
Dim lr As Long, i As Long, pr As Long

ws.Range("B1:B50").ClearContents
lr = ws.Range("A" & ws.Rows.Count).End(xlUp).Row

For i = 1 To lr
    If ws.Cells(i, 1).IndentLevel = 1 Then
        If InStr(ws.Cells(i, 1), "|TE|") Then
            pr = ws.Range("C" & ws.Rows.Count).End(xlUp).Offset(1).Row
            ws.Range("C" & pr) = Application.Trim(ws.Cells(i, 1))
        ElseIf InStr(ws.Cells(i, 1), "|Sub") Then
            pr = ws.Range("D" & ws.Rows.Count).End(xlUp).Offset(1).Row
            ws.Range("D" & pr) = Application.Trim(ws.Cells(i, 1))
        Else
            pr = ws.Range("B" & ws.Rows.Count).End(xlUp).Offset(1).Row
            ws.Range("B" & pr) = Application.Trim(ws.Cells(i, 1))
        End If
    End If
Next i

ws.Range("B:D").IndentLevel = 0  

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