Excel 用于合并单元格的宏

Excel 用于合并单元格的宏,excel,excel-2007,vba,Excel,Excel 2007,Vba,我有一个Excel文件,在B列有发票编号(B2:B14987),在C列有项目ID,在D列有销售价值,在E列有发票折扣价值 我需要一个宏来根据发票编号列合并发票折扣值单元格,发票编号重复,因为一张发票中有不同的项目ID 例如:B1:B3是相同的发票编号,E1是发票的常用折扣值,这些发票位于B1:B3中,E2:E3是空白单元格。因此,我希望将E1:E3与E1中的值合并,以下代码符合我的要求;像往常一样,如果我误解了,请澄清问题,我们会到达那里 在电子表格中创建模块,并粘贴以下代码: Private

我有一个Excel文件,在B列有发票编号(
B2:B14987
),在C列有项目ID,在D列有销售价值,在E列有发票折扣价值

我需要一个宏来根据发票编号列合并发票折扣值单元格,发票编号重复,因为一张发票中有不同的项目ID


例如:
B1:B3
是相同的发票编号,
E1
是发票的常用折扣值,这些发票位于
B1:B3
中,
E2:E3
是空白单元格。因此,我希望将
E1:E3
E1
中的值合并,以下代码符合我的要求;像往常一样,如果我误解了,请澄清问题,我们会到达那里

在电子表格中创建模块,并粘贴以下代码:

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
Private Sub mergeAndAlign(r As范围)
带r
.HorizontalAlignment=xlCenter
.垂直对齐=xlCenter
.MergeCells=True
以
端接头
子合并全部()
'跨过E列
'合并具有相同发票编号的所有单元格
“它们已经排序了,我们需要的值在第一个单元格中
'要合并的块的
调光范围
将项目设置为范围
Dim nextItem As范围
Dim lastRow、thisRow、rCount As Integer
lastRow=[B2]。结束(xlDown)。行
Set previitem=[E2]
Set nextItem=previitem.End(xlDown)

而nextItem.Row要获得有意义的答案,请阅读常见问题解答及其说明和我个人的最爱:请向我们展示您的代码,我们将帮助您修复或改进它。@Philip,我有litle excel的经验,对VBA一无所知,请help@davidb:也许您可以先录制宏,然后尝试修改代码以满足您的需要?您所说的“合并”是什么意思?在我看来,“透视表”正是您需要的东西,而不是宏。你熟悉这些吗?你能给我举一个电子表格的简单例子吗?(只有几行)“这就是我所拥有的,这就是我想要的结果”@Floris非常感谢你,这就是我想要的。非常感谢,不客气。一旦明确了你想要什么,这就相对容易了。关键是要提出非常精确的问题!