2015-10-10 55 views
0

我的合併單元格值自動總結了一個非常特殊的情況下,我不能管理循環正確:總結一下列值

有,首先在我的表九列五個Range("A:E")包括有關客戶和日期的信息。在其他四列中有一堆變量,前兩個(列FG)手動輸入,最後兩個應該是自動計算的(H使用Excel公式計算,I將使用VBA計算)。

每當一個新的變量投入F列,而不在很行的客戶和日期部分Range("A:E")的變化,我想的Range(A:E)細胞與以上這樣的合併。在這種情況下,我還希望最後一列I合併爲特定的行數。該合併過程的代碼基本上能正常工作,它是這樣的:

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim tmp As Range 
Dim i As Integer 

For Each tmp In Range("F4:F1000") 
If tmp.Value <> "" Then 
If tmp.Offset(0, -1).Value = "" Then 
Range(tmp.Offset(0, -1), tmp.Offset(-1, -1)).MergeCells = True 
Range(tmp.Offset(0, -2), tmp.Offset(-1, -2)).MergeCells = True 
Range(tmp.Offset(0, -3), tmp.Offset(-1, -3)).MergeCells = True 
Range(tmp.Offset(0, -4), tmp.Offset(-1, -4)).MergeCells = True 
Range(tmp.Offset(0, -5), tmp.Offset(-1, -5)).MergeCells = True 
Range(tmp.Offset(0, 3), tmp.Offset(-1, 3)).MergeCells = True 
Else 
tmp.Offset(0, -1).MergeCells = False 
tmp.Offset(0, -2).MergeCells = False 
tmp.Offset(0, -3).MergeCells = False 
tmp.Offset(0, -4).MergeCells = False 
tmp.Offset(0, -5).MergeCells = False 
tmp.Offset(0, 3).MergeCells = False 
End If 
End If 
Next tmp 

End Sub 

棘手的部分是這樣的:我想最後一列I自動的合併範圍,總結了在同一列中的值在H列行像下面圖片中看到(圖片只顯示列DH

http://i.stack.imgur.com/kebpQ.jpg

我的想法是前Else把下面的代碼:

i = (tmp.Offset(0, -1).MergeArea.Rows.Count - 1) * (-1) 
tmp.Offset(i, 3) = Application.Sum(Range(tmp.Offset(i, 2), tmp.Offset(0, 2))) 

不幸的是,這個非常的代碼片段的結果一起時被合併超過三排(雖然當我跑分條整經此過程中不會出現單排無限的,混亂的合併和取消合併過程沒有額外的代碼片段)。

有沒有人有想法解決這個問題?

另外,我會很感激任何關於如何擴展代碼的建議,以便刪除第F列中的單元格。我知道VBA通過使用單元格合併變得非常複雜,我最終必須堅持每一行中的重複值。不過,如果有人喜歡這個挑戰,我很歡迎這個問題的幫助!

+0

看看[這裏](http://stackoverflow.com/questions/22075988/detect-merged-cells-in-vba-excel-with-mergearea)如何測試它是否合併。然後使用合併的地址來指定range.value,否則就使用單元格。 –

回答

0

只需使用

range(range("A3").MergeArea.Cells(1,1).address).value 

它將工作單元格是否合併與否。將「A3」更改爲您所需的單元格。

簡而言之,就是在存儲值的合併區域中找到左上角的單元格。如果只有一個單元格,則返回該單元格的值。