Excel 用于合并单元格的宏
我有一个Excel文件,在B列有发票编号(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
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非常感谢你,这就是我想要的。非常感谢,不客气。一旦明确了你想要什么,这就相对容易了。关键是要提出非常精确的问题!