【问题标题】:Loop and concatenate 2 cell value between specific range在特定范围之间循环并连接 2 个单元格值
【发布时间】:2019-03-08 12:12:09
【问题描述】:

我正在尝试识别 A 列中的特定范围并连接特定范围内的两个单元格并删除空单元格。我已经成功地将代码放在一起,并且做得很好。但是,我不知道如何循环它来识别下一个范围。任何帮助将不胜感激。

根据下面的图像和代码,首先,我在 A 列中查找并选择两个 (MCS) 之间的范围,条件是,如果两个 MCS 之间的行数超过 8。然后我在 MCS 之后立即连接前 2 个单元格并删除空行。

以下代码适用于第一个范围,但我无法循环识别从第 22 行到第 32 行的下一个范围并执行连接。我想在 A 列循环,因为会有更多 MCS。

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

【问题讨论】:

  • 您只执行一次查找,因此您需要构建一个循环。网上有很多例子——看起来你应该可以试一试。
  • 我不是程序员,但我尝试了 stackoverflow 的帮助来组装一些代码。但无法循环。任何帮助都会很棒。谢谢
  • 为什么要省略第 13-22 行?
  • 13 到 22 之间的行数是 8,所以只有超过 8 行我才需要查找并选择该范围。
  • 所以中间的行数需要8以上。如果还没回答,我今天晚些时候再看看。

标签: excel vba


【解决方案1】:

你可以试试:

Option Explicit

Sub test()

    Dim i As Long, Lastrow As Long, Startpoint As Long, Endpoint As Long, Diff As Long
    Dim str As String

    With ThisWorkbook.Worksheets("Sheet1")

        Lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row

        Startpoint = 0
        Endpoint = 0

        For i = Lastrow To 2 Step -1

            str = .Range("A" & i).Value

            If str = "MCS" And Startpoint = 0 Then
                Startpoint = i
            ElseIf str = "MCS" And Startpoint <> 0 Then
                Endpoint = i
            End If

            If Startpoint > 0 And Endpoint > 0 Then

                Diff = Startpoint - Endpoint

                If Diff > 8 Then

                    .Range("A" & Endpoint + 1).Value = .Range("A" & Endpoint + 1).Value & " " & .Range("A" & Endpoint + 2).Value
                    .Rows(Endpoint + 2).EntireRow.Delete

                    Startpoint = 0
                    Endpoint = 0

                End If

            End If

        Next i

    End With

End Sub

【讨论】:

  • 嗨,错误 1104,我很惊讶您最初似乎可以正常工作,但现在它正在随机选择范围。并非所有超过 8 行的 MCS 之间的范围都被选取。任何帮助将不胜感激。
  • @Siraj 很遗憾听到这个消息。请使用断点和即时窗口调试代码,并仔细检查每个变量的值并尝试调查问题。一旦您得出结论并设法找到一些东西,请告诉我以帮助您。
猜你喜欢
  • 2018-09-12
  • 2014-12-08
  • 1970-01-01
  • 2015-06-26
  • 2016-01-31
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
相关资源
最近更新 更多