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

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

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

BC 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。

使用WorksheetFunction对象 MATCH函数来定位“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 

这只是find重新启动点('的'),并使用一些math来调整要合并的单元格的问题。


merge_groups

一个替代的代码模式,使用一个辅助列的公式方法(在结束之前清除),只跳过相关的行

 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