反向追踪编号项目列表

反向追踪编号项目列表

是否有一种编程的、非宏的方法来反向追踪一组编号项目?

例子:

替代文本

前两列是输入数据的列,可以看到项目 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是您正在调查的价值

相关内容