我正在尝试根据另一列(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。
答案 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')并使用一些数学来调整要合并的单元格的问题。
答案 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