获取一系列合并细胞的价值

时间:2015-06-17 16:01:50

标签: excel vba excel-vba

我有一系列合并的单元格,其中包含值。我只想读取每个合并单元格中包含的值。合并区域中的单元格数量不同。现在我有这个:

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倍。有没有人有想法解决这个问题?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:-1)

不使用范围B20:K23,而是使用B20:B23。使用B:K范围,它(如你所注意到的)将通过每个基础'合并单元格中的单元格并反复返回相同的值。如果你使用B:B代替它,它将按照你的意愿行事 - 遍历每个合并的单元格ONCE并返回该值。

这有意义吗?

编辑:请让我知道为什么downvotes,我也在努力学习,所以如果这个方法不好,请告诉我为什么这样我也可以学习。