我有一个主工作表,其中包含我希望使用查找链接到另一个“摘要”表的数据。
但是,我希望将其数据包含在汇总表中的某些单元格跨两个或多个相邻行合并。需要明确的是,我在公式中用于识别目标行的“主要”列 A 不包含合并单元格,但我希望从中返回值的列包含合并单元格。
我尝试过VLOOKUP
和INDEX+MATCH
。问题是只返回第一行键的数据,其他的返回零(好像目标列中的单元格是空白的,但实际上是合并的)。
我尝试过一些不太优雅的方法来解决这个问题,例如使用IF
语句来尝试找到合并单元格的顶行。但是,如果汇总表中的值的顺序与主表中的顺序不同,这些方法就不太有效,而且很混乱。
这能做到吗?
答案1
我认为使用现有的 Excel 公式无法轻松实现这一点。问题有两个方面。首先,据我所知,没有 Excel 函数可以告诉您单元格是否属于合并范围。其次,合并范围中显示的值实际上仅位于合并范围的第一个单元格中。
如果您愿意使用 VBA 创建自定义函数,则可以通过结合函数Match
和 Range 对象知道它们是否是合并范围的一部分这一事实轻松完成此操作。
Public Function VLookupMerge(lookup_value As Variant, table_array As Range, col_index As Long) As Variant
Dim sMatchFormula As String
Dim row_index As Variant
Dim r As Range
sMatchFormula = "=MATCH(" & lookup_value _
& "," & table_array.Columns(1).Address(External:=True) _
& ",0)"
row_index = Application.Evaluate(sMatchFormula)
If TypeName(row_index) = "Error" Then
VLookupMerge = row_index
Else
Set r = table_array.Cells(row_index, col_index)
VLookupMerge = r.MergeArea.Range("A1")
Set r = Nothing
End If
End Function
答案2
合并单元格只是格式化。问题在于正确指向具有值的单元格。一种方法是使用辅助列,Excel 可以在其中找到所需的内容(实际值或指向它的指针)。如果每行都与实际值或“合并值”相关联,则这种方法更加实用。如果某些行没有值,则在辅助列中创建路线图会变得更加复杂。
但是对于每行都与实际值或合并值相关联的情况,一个简单的解决方案将是这样的。假设 VLOOKUP 目标是 A 列,B 列包含合并值。在右侧创建一个辅助列;我将使用 C 列作为示例。假设第 1 行是第一个数据行,因此 B1 将始终有一个值。在辅助列中,C1 将只是:
=B1
单元格 C2 为:
=if(isblank(B2),C1,B2)
将其复制到该列。辅助列将包含每一行的值,VLOOKUP 可以从该列中提取。
我不知道有哪个常规(至少是本机)函数可以返回单元格是否属于合并范围。因此,如果存在既没有实际值也没有合并值的单元格,则可能需要其中一种 VBA 解决方案。
答案3
这是另一种方法(使用 VBA)来了解单元格是否属于合并区域。我有时会使用此函数(以及从此函数派生的一些其他函数):
Public Function IsMerged(AnyRange As Range) As Boolean
Dim MergedRegion As Range
IsMerged = AnyRange.MergeCells
If IsMerged Then Set MergedRegion = AnyRange.MergeArea Else Set MergedRegion = AnyRange
Debug.Print MergedRegion.Rows.Count; " x "; MergedRegion.Columns.Count
Debug.Print MergedRegion.Cells.Address
End Function
希望这会有所帮助。