考虑一系列合并单元格的价值

我有一个合并单元格的值的范围。 我只想读取每个合并单元格中包含的值。 合并区域中的小区数量是不同的。 现在我有这个:

Sub testnoms() Dim cell As Range For Each cell In ActiveSheet.Range("B20:K23") 'this would be the range to look at Debug.Print cell.MergeArea.Cells(1, 1).Value Next End Sub 

现在它到达范围内的每个单元格,并返回其合并区域中的值。 所以我得到正确的值,但我有合并区域中的每个单元格的副本。 例如,如果将5个单元格合并在一起,则会打印合并单元格的值的5倍。 有没有人有一个想法来解决这个问题?

 Sub testnoms() Dim cell As Range For Each cell In ActiveSheet.Range("B20:K23") If cell.Address() = cell.MergeArea.Cells(1).Address() Then Debug.Print cell.Address(), cell.MergeArea.Cells(1, 1).Value End If Next End Sub 

如果您需要捕获可能不完整包含在您定义范围内的合并区域值:

 Sub testnoms() Dim c As Range, d, addr Set d = CreateObject("scripting.dictionary") For Each c In ActiveSheet.Range("B20:K23") addr = c.MergeArea.Address() If Not d.exists(addr) Then d.Add addr, True Debug.Print c.Address(), c.MergeArea.Cells(1).Value End If Next End Sub 

而不是使用范围B20:K23,使用B20:B23。 使用B:K范围,它会(如你注意到的那样)遍历合并单元格中的每个“底层”单元格,并且一遍又一遍地返回相同的值。 如果您使用B:B,它将按照您的要求进行操作 – 通过每个合并的单元格,并返回该值。

那有意义吗?

编辑:请让我知道为什么downvotes,我也试图学习,所以如果这种方法不是一个好的,请让我知道为什么,所以我也可以学习。