根据条件合并列中的单元格

时间:2016-04-13 15:52:28

标签: excel excel-vba excel-2013 vba

我正在尝试根据另一列(C列)中的条件合并列(B列)中的单元格。

在C列中,我有一个从1开始并最多为10的列表。但是,它可以在10之前停止任何数字并重新启动。例如:

B C

  1
  2
  3
  4
  5
  6
  1
  2
  3
  4
  1
  2
  3
  4
  5
  1

正如你所看到的,在B7和B11,C列从1开始。当发生这种情况时,我想合并重启之上的所有内容(重启之前从1到最后一个数字)。所以对于这个例子,我想合并B1:B6,B7:10和B11:15。

2 个答案:

答案 0 :(得分:1)

使用WorksheetFunction object MATCH function定位'ones'的这个短循环应该足够了。

Dim srw As Long, frw As Variant
With Worksheets("Sheet1")
    With Intersect(.Columns(3), .UsedRange)
        srw = 0
        Do While srw < .Rows.Count
            frw = Application.Match(1, .Columns(1).Offset(srw + 1, 0), 0)
            If Not IsError(frw) Then
                .Cells(srw + 1, 1).Resize(frw, 1).Offset(0, -1).Merge
                srw = srw + frw
            Else
                srw = .Cells(Rows.Count, 1).End(xlUp).Row
            End If
        Loop
    End With
End With

这只是找到重启点('ones')并使用一些数学来调整要合并的单元格的问题。

merge_groups

答案 1 :(得分:0)

替代代码模式,使用带有辅助列的公式方法(在结束前清除),仅通过相关行跳转

Option Explicit

Sub test()

Dim i As Long

With Worksheets("Sheet001")
    With .Columns(3).SpecialCells(xlCellTypeConstants, xlNumbers)
        With .Offset(, 1)
            .FormulaR1C1 = "=if(RC[-1]=1,"""",1)"
            .Value = .Value
            With .SpecialCells(xlCellTypeBlanks)
                For i = 1 To .Areas.Count - 1
                    Range(.Areas(i).Cells(.Areas(i).Count), .Areas(i + 1).Cells(1).Offset(-1)).Offset(0, -2).Merge
                Next i
            End With
            .ClearContents
        End With
    End With
End With

End Sub