2013-04-30 114 views
-1

我有一個Excel文件,列B中的發票號碼((B2:B14987),列C中有項目ID,列D中有售出價值,列E中有發票優惠價值。用於合併單元格的宏

我需要一個宏來合併基於發票號碼列的發票折扣值單元格,重複發票號碼,因爲在一張發票中有不同的物品ID。

例如:B1:B3是相同的發票號,E1針對的是在B1:B3E2:E3是空白單元發票共同折扣值。所以我想要合併E1:E3,其值爲E1

+1

爲了獲得一個有意義的答案,請閱讀使用說明書的常見問題http://stackoverflow.com/questions/how-以及我個人的最愛:http://mattgemmell.com/2008/12/08/what-have-you-tried – 2013-04-30 12:50:50

+1

請向我們展示您的代碼,我們將幫助您解決或改進它。 – 2013-04-30 13:02:46

+0

@菲利普,我有一個很好的經驗,對VBA沒有任何想法,請幫忙 – davidb 2013-04-30 13:22:45

回答

2

下面的代碼做我認爲你所要求的;一如既往,如果我誤解了,請澄清的問題,我們將有...

在電子表格中創建模塊,並在下面的代碼粘貼:

Private Sub mergeAndAlign(r As Range) 
    With r 
     .HorizontalAlignment = xlCenter 
     .VerticalAlignment = xlCenter 
     .MergeCells = True 
    End With 
End Sub 

Sub mergeAll() 
' step through column E 
' merge all cells that have the same invoice number 
' they are already sorted - and the value we need is in the first cell 
' of the block to be merged 
Dim r As Range 
Dim prevItem As Range 
Dim nextItem As Range 
Dim lastRow, thisRow, rCount As Integer 

lastRow = [B2].End(xlDown).Row 

Set prevItem = [E2] 
Set nextItem = prevItem.End(xlDown) 

While nextItem.Row <= lastRow 
    Set r = Range(prevItem, nextItem.Offset(-1, 0)) 
    mergeAndAlign r 
    Set prevItem = nextItem 
    Set nextItem = nextItem.End(xlDown) 
Wend 

' do the last item: 
Set nextItem = Cells(lastRow, 5) ' last valid cell in column E 
Set r = Range(prevItem, nextItem) 
mergeAndAlign r 

End Sub 

運行從代碼感興趣的表。點擊Alt-F8打開「宏」對話框 - 您應該在列表中看到「MergeAll」項(可能是唯一的一個)。它會帶你從這樣的:

original spreadsheet

要這樣:

spreadsheet after merge

+0

@ Floris-非常感謝你,這就是我想要的。非常感謝 – davidb 2013-05-02 14:41:13

+2

不客氣。一旦清楚你想要什麼,它相對容易。關鍵是要問非常確切的問題! – Floris 2013-05-02 14:54:41