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

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

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

当然,随着方法变得越来越复杂,为了方便将来的重用,修改和可读性,build议使用VBA,在这里添加注释变得更简单,并且使algorithm在连续的stream程中工作。

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

假设你的C1范围在列A中find,你的C2值都在行1中find,你可以使用VLOOKUP来填充matrix,然后处理任何#N / A。

所以我们有:

C3值表

  • 列B中的C1值
  • C列中的C2值
  • 组合坐标在D列中
  • 列E中的C3值

C1范围表

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

创buildC1范围表

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 = 413,C2 = 21转换为“400-500,21”,

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

然后按列Dsorting并在C1和C2值的matrix中使用VLOOKUP

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