我有一系列合并的单元格,其中包含值。我只想读取每个合并单元格中包含的值。合并区域中的单元格数量不同。现在我有这个:
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倍。有没有人有想法解决这个问题?
答案 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,我也在努力学习,所以如果这个方法不好,请告诉我为什么这样我也可以学习。