2016-04-13 44 views
0

我試圖根據另一列(列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。

回答

1

使用WorksheetFunction objectMATCH 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 

這只是一個尋找重新啓動點(的「1」),並使用一個小的數學來調整要合併單元格的事。


merge_groups

+0

真棒,我看到它的工作。但是,我在表格上方有我不想合併的單元格。所以,表格真的從Cells B9和C9開始。在代碼中是否可以添加或編輯代碼以使代碼僅適用於單元格C9:B169?我對VBA代碼很陌生,不熟悉它。 – johnydoo

+0

你可以試試'srw = 8'。 – Jeeped

+0

完美。工作。現在我有幾個後續問題。 1)我放了一個按鈕,並將其分配給它,所以它運行一旦你按下按鈕,當我按下按鈕時,我得到Microsoft Visual Basic for Applications(400)錯誤。有什麼建議麼? 2)當我輸入列表時,我不會總是以「1」結尾,所以上面的所有內容都會合並。例如:在你的表中,如果你從C16中刪除了「1」,那麼C11:C16中只有1到5,我可以在代碼中添加一些東西來知道合併它嗎? 3)最後,你是否有一個VBA代碼,將一個較粗的邊框添加到從列B到O的「1」之上的所有單元格中。 – johnydoo

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 
相關問題