Excel VBA для цикла и поиска определенного диапазона, объединения двух значений ячеек и удаления пустой ячейки - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь определить конкретный диапазон в столбце A, объединить две ячейки в указанном диапазоне и удалить пустую ячейку.Мне удалось собрать код, и он отлично справляется со своей задачей.Но я не знаю, как это сделать, чтобы определить следующий диапазон.Любая помощь будет принята.

Как показано на рисунке ниже и код, во-первых, я нахожу и выбираю диапазон между двумя (MCS) в столбце A с условием, что, если между строк больше 8два MCS.Затем я объединяю первые 2 ячейки сразу после MCS и удаляю пустую строку.

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

Я не знаю, как выполнить цикл в столбце A, выбрать диапазоны и объединить.Любая помощь приветствуется.Спасибо

enter image description here

Sub MergeStem()
    Dim findMCS1 As Long
    Dim findMCS2 As Long
    Dim myCount As Integer
    Dim myStems As Long
    Dim mySelect As Range
    Dim c As Range

    findMCS1 = Range("A:A").Find("MCS", Range("A1")).Row
    findMCS2 = Range("A:A").Find("MCS", Range("A" & findMCS1)).Row

    myCount = Range("A" & findMCS1 + 1 & ":A" & findMCS2 - 1).Cells.Count
    Range("B1").Value = myCount
    MsgBox "Number of rows =" & myCount

    Set mySelect = Selection

    If myCount > 8 Then
        myStems = Range("A" & findMCS1 + 2 & ":A" & findMCS2 - 9).Select

        Set mySelect = Selection

        For Each c In mySelect.Cells
            If firstcell = "" Then firstcell = c.Address(bRow, bCol)
            sArgs = sArgs + c.Text + " "

            c.Value = ""
        Next
        Range(firstcell).Value = sArgs
    End If

    Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

    Application.ScreenUpdating = True

End Sub

1 Ответ

1 голос
/ 12 марта 2019

Можете ли вы попробовать это? Обычно, Find было бы правильным способом, но поскольку вы удаляете строки, трудно отследить, какие ячейки вы нашли.

Sub x()

Dim r As Long, n1 As Long, n2 As Long

With Range("A1", Range("A" & Rows.Count).End(xlUp))
    For r = .Count To 1 Step -1
        If .Cells(r).Value = "MCS" Then
            If n1 = 0 Then
                n1 = .Cells(r).Row
            Else
                n2 = .Cells(r).Row
            End If
            If n1 > 0 And n2 > 0 Then
                If n1 - n2 > 9 Then
                    .Cells(r + 1).Value = .Cells(r + 1).Value & .Cells(r + 2).Value
                    '.Cells(r + 2).EntireRow.Delete
                    'Call procedure to delete row 
                End If
                n1 = n2
                n2 = 0
            End If
        End If
    Next r
End With

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