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