-2

我是 VBA 编程的新手,正在努力解决我遇到的这个问题。

我需要帮助使用 Excel VBA 处理大量 2D 矩阵数据,如何根据另一张表中的一组特定查找值从数据表中获取列名称,使用 VBA 代码进行反向查找?

查找值可以重复,但我们希望在列中第一个出现的位置捕获其列名,请参见下面的示例。

使用 VBA 的原因是由于数据量大,而 Excel 是唯一合适的工具。

有什么想法吗?

查找值 列名称
A101 L2
A102 L3
A201 L2
A304 L5

二维表

参考 L1 L2 L3 L4 L5
CX1 A100 A101 A102 A102 A102
CX2 A100 A101 A102 A103 A104
CX3 A111 A111 A113 A114 A114
CX4 A200 A201 A201 A201 A201
CX5 A300 A301 A302 A303 A304
4

1 回答 1

1

不需要VBA。如果您正在查找查找值出现的第一列,您可以使用:

=INDEX(Table1[#Headers],AGGREGATE(15,6,1/(J2=Table1)*COLUMN(Table1)-INDEX(COLUMN(Table1)-1,1),1))

请注意,我使用了Table,但如果您愿意,可以使用常规寻址。

在此处输入图像描述

算法

  • {TRUE,FALSE}根据等式创建一个二维数组
  • 1/theArray=> 数组{1,#DIV/0!}
  • 乘以列号;然后减去表的第一列(减1)以创建一个适合索引到表中的数字
  • 使用AGGREGATE带有SMALL参数的函数和忽略错误的选项,以返回查找值的最小索引列参数
  • 用于从数组INDEX中返回适当的值#Headers

如果必须使用 VBA,可以创建用户定义函数:

Option Explicit
Function Header(lookup_value, table As Range) As String
    Dim c As Range
    Set c = table.Find(what:=lookup_value, LookIn:=xlFormulas, lookat:=xlWhole, searchorder:=xlByColumns, searchdirection:=xlNext)
    If Not c Is Nothing Then Header = table(1, c.Column - table.Column + 1)
End Function

于 2022-01-03T01:46:11.770 回答