使用单个列将数据映射到表数组

时间:2014-03-23 14:17:15

标签: excel vba excel-vba

假设我有两列,C1和C2,每列都包含实值数据。我想从这些列创建一个二维表,其中每一行是C1中的特定值范围(例如400-500),每列是C2中特定范围的值(例如10-14)。通过对C1和C2进行排序并确定合理的范围,这很容易。关键问题是我有第三列C3,其值我想填写表格。特别是,我希望能够选择C3并检查C1和C2中的相关值,并使用此信息将值放在表的这两个值的交叉点的相应单元格中。这是否需要VBA?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你的C3有(C1,C2)作为坐标。您在C1中的原始坐标是一个数字,但在矩阵中它是非重叠范围,例如,C1可以是413但是在新矩阵中它落在401-500的范围内。通过使用VLOOKUP进行数据映射和转换,可以在没有VBA的情况下执行此操作。

当然,随着方法变得越来越复杂,为了便于将来重用,修改和可读性,建议使用VBA,这样可以更简单地添加注释并在连续流中查看算法。 / p>

如果你想避免使用VBA,你可以做的是使用VLOOKUP范围查找得出C1落入的范围,并将这个范围和C2值组合成一个单元格,用逗号分隔,然后在C3中对数据进行排序按此新列按升序排列。请注意,当使用VLOOKUP范围查找时,它将始终给出响应,因为它将查找等于或小于C1值的最大值,因此它往往不会产生#N / A; 您必须确保您的范围涵盖C1的所有可能值

假设您的C1范围在 A列中找到,并且您的C2值都在第1行中找到,您可以使用VLOOKUP填充矩阵,然后处理任何< em>#N / A 此后。

所以我们有:

C3值表

  • B列中的C1值
  • C列中的C2值
  • 工作表中的D列中的组合坐标
  • E列中产生的C3值

C1范围表

  • A列中范围的最小值
  • B列的实际范围

创建C1范围表

Min val     Range
0           0
1           1-100 
101         101-200
201         201-300
301         301-400
401         401-500
501         501-600
etc.

将C1和C2坐标组合到D列中。例如,这将C1 = 413,C2 = 21转换为&#34; 400-500,21&#34;,

=VLOOKUP(B2,TableC1Ranges!$A$2:$B$100,2)&","&C2

然后按列D排序并在C1和C2值的矩阵中使用VLOOKUP

=VLOOKUP($A2&","&B$1,TableC3!$D$2:$E$1000,2,FALSE)