是否有一种编程的、非宏的方法来反向追踪一组编号项目?
例子:
前两列是输入数据的列,可以看到项目 A 与项目 1、2、3 有关系,最右边的一列,项目 1、2、3 都可以追溯到项目 A。
如果这确实需要自定义宏,您能否提供一些关于如何使用内置函数对其进行预处理的建议,以使编写宏更容易?
答案1
我不相信有一种方法可以在不使用宏的情况下进行您想要的查找。我可能是错的,但如果我没有错,这里有一个自定义函数供您使用。
这个东西似乎不需要任何预处理就可以工作。你可以这样使用它:
在 1 旁边的单元格中,公式为
=ReverseTrace(A10,$B$1:$B$7,-1)
假设:
- A10 是“1”的位置(您要查找的值)
- $B$1:$B$7 是项目列表的位置(1、2、3 至 2、4)
- -1 是您要查询的 $B$1:$B$7 列表的列的偏移量
因此,接下来的 2 将是 =ReverseTrace(A11,$B$1:$B$7,-1)
Function ReverseTrace(varValue As Variant, lookupRange As Range, intTraceOffset As Integer)
Dim rngCell As Range
For Each rngCell In lookupRange
If InStr(1, CStr(rngCell.value), CStr(varValue)) > 0 Then
If Len(ReverseTrace) > 0 Then
ReverseTrace = ReverseTrace & ", " & rngCell.Offset(0, intTraceOffset)
Else
ReverseTrace = rngCell.Offset(0, intTraceOffset)
End If
End If
Next
End Function
答案2
我曾尝试使用数组公式来解决这个问题,但是没有取得多大成功。
我有几乎到了那里,所以决定发布我迄今为止的(缺乏)结果,以防其他人可以充实我所缺少的最后一步。
这是我目前得到的结果。它几乎可以正常工作,但由于它IF
似乎不返回数组,而只返回第一个项目,因此最终只返回第一个类别(“A”)而不是集合。我不确定是否可以解决这个问题,还有其他人有什么想法吗?
CONCATENATE( IF( NOT( ISERROR( SEARCH(D1,$B$1:$B$7) ) ), $A$1:$A$7 , "" ) )
数组中的范围:
$B$1:$B$7
您是否在查找值(“1,2,3”等)$A$1:$A$7
是类别(“A”,“B”等)D1
是您正在调查的价值