【问题标题】:Macro for merging cells合并单元格的宏
【发布时间】:2013-04-24 09:34:36
【问题描述】:

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

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

例如:B1:B3 是相同的发票编号,E1 是发票的常见折扣值,B1:B3E2:E3 是空白单元格。所以我希望 E1:E3E1 中的值合并。

【问题讨论】:

  • 要获得有意义的答案,请阅读带有说明的常见问题解答stackoverflow.com/questions/how-to-ask 和我个人最喜欢的:mattgemmell.com/2008/12/08/what-have-you-tried
  • 请向我们展示您的代码,我们将帮助您修复或改进它。
  • @Philip,我没有 excel 经验,对 VBA 没有任何想法,请帮助
  • @davidb:也许您可以先录制一个宏,然后尝试修改代码以满足您的需求?
  • “合并”是什么意思?在我看来,“数据透视表”只是您需要的东西,而不是宏。你熟悉那些吗?您能否展示一个简单的电子表格示例(仅几行) - “这就是我所拥有的,这就是我想要的结果”?

标签: excel excel-2007 vba


【解决方案1】:

以下代码可以满足您的要求;一如既往,如果我误解了,请澄清问题,我们会到达那里......

在您的电子表格中创建一个模块,然后粘贴以下代码:

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”项(可能是唯一一项)。它会带你从这里开始:

到这里:

【讨论】:

  • @Floris-非常感谢你,这就是我想要的。非常感谢
  • 不客气。一旦明确了你想要什么,它就相对容易了。关键是提出非常精确的问题!
猜你喜欢
  • 2018-07-16
  • 1970-01-01
  • 2014-03-02
  • 2014-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-10
相关资源
最近更新 更多