Найти и скопировать текст для вставки в следующие ячейки - PullRequest
0 голосов
/ 28 февраля 2019

Мне нужно идентифицировать текст в столбце, который может быть «Обычный сезон», «Летний сезон», «Рождественский сезон» или «Статические праздники», затем заполнить этот текст в следующих ячейках, пока в ячейке не появится числовое значение.

У меня есть фиксированный столбец, и я знаю общее количество строк в столбце.

Предварительно
Before problem solution

Столбец E содержит комбинацию текстовых и числовых значений(например, 40, 0, 12 на скриншоте выше).

Post
After the problem solution.

Я хочу, чтобы каждая ячейка в столбце E имела одно из четырех значений "Регулярный сезон", "Summer Season "," Christmas Season "или" Stat Holidays ".

Когда Excel находит, что значением является" Regular Season ", он должен скопировать эту ячейку и продолжить вставлять ее, пока не найдет одно из других значений,то есть "летний сезон", "рождественский сезон" или "праздничные дни".Если он находит другое значение, например «Летний сезон», то Excel не должен перезаписывать его, вместо этого скопируйте эту ячейку и начните заполнять следующие ячейки «Летним сезоном», пока он снова не достигнет одного из этих четырех текстовых значений.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Вы можете попробовать:

Option Explicit

Sub Test()

    Dim str As String
    Dim Lastrow As Long, i As Long, y As Long, StartPoint As Long, EndPoint As Long

    'With statement with the sheet1 that i will use
    With ThisWorkbook.Worksheets("Sheet1")
        'Find last row of column a
        Lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
        'Assign value to end point
        EndPoint = 0
        'Loop from row 1 to lastrow
        For i = 1 To Lastrow
            'Assing value to start point
            StartPoint = 0
            'Check if the cell in not empty,not numeric and i is greater that Endpoint
            If .Range("A" & i).Value <> "" And Not IsNumeric(.Range("A" & i).Value) And i > EndPoint Then
                str = .Range("A" & i).Value
                'Assing value to Start point
                StartPoint = i
                'Loop from i+1 to last row
                For y = i + 1 To Lastrow
                    'Assing value to End point
                    EndPoint = 0
                    'Check if value not empty and is numeric
                    If .Range("A" & y).Value <> "" And IsNumeric(.Range("A" & y).Value) Then
                        'Assing value to End point
                        EndPoint = y
                        'Exit the loop
                        Exit For
                    End If

                Next y
                'Import value to range create by the start & end point
                .Range(Cells(StartPoint, 1), Cells(EndPoint, 1)).Value = str

            End If

        Next i

    End With





End Sub
0 голосов
/ 28 февраля 2019

при условии, что ваши данные находятся в столбце А, вы можете попробовать это:

Dim iArea As Long

With Range("A1", Cells(Rows.Count, 1).End(xlUp))
    With .SpecialCells(xlCellTypeConstants, xlNumbers)
        For iArea = .Areas.Count To 2 Step -1
            Range(.Areas(iArea - 1).End(xlDown), .Areas(iArea)).Value = .Areas(iArea - 1).End(xlDown).Value
        Next
    End With
    .Range("A1", .SpecialCells(xlCellTypeConstants, xlNumbers).Areas(1)).Value = .Range("A1").Value
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...