我有一张电子表格,用户可以在其中输入一系列数据点,最终绘制成图表。表格共有 100 行,最左边的列包含每行的勾选框。我希望用户能够勾选这 100 个框中的 10 个,并将这些数据按从列表顶部到底部的顺序绘制成图表。
勾选框与显示真假的列相链接。最终,我将得到一列,其中包含 90 行“假”和 10 行“真”。每次使用工作表时,真值行可能位于不同位置,包括第一行包含真值。
我想要将 10 个真实行的数据复制到一个 10 行表中(在同一张表上)并绘制成图表。
我曾想过从上到下将真实的行编号为 1-10,这样可以简单地将数据复制到 10 行表中。
但是,我无法让这些“真实”行的编号每次都与不同的起始行配合使用。我最接近的方法是使用 COUNTIF 公式。
有人可以帮忙吗?
答案1
虽然有更优雅的解决方案,但公式有些复杂,但这将为您提供一个非常简单且易于实现的解决方案。
让我们假设您的 TRUE/FALSE 值(我假设这些值在您的单元格中转换为 1 和 0)在范围 D3:D103 内,并且进一步假设与每个潜在的 100 个 TRUE/FALSES 相关的文本在范围 E3:E103 内。
在单元格 C3 中输入以下公式,然后复制到 C103:
=SUM(D$3:D3)
这将为您提供类似 0,0,0,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3
等向下的内容,具体取决于 D 列中 1 的位置。
(如果您没有 1 和 0,并且您实际上直接从表单控件中获得了 TRUE/FALSE 条目,则只需使用=SUMPRODUCT(--(D$3:D3))
即可)
现在在单元格 J6:J15 中输入值1,2,3,4,5,6,7,8,9,10,
,然后在单元格 K6 中输入以下公式并复制到 K15:
=VLOOKUP(J6,$C$3:$E$103,3,0)
现在您将在 K 列中看到与已勾选的 10 个选项相关的文本,按照它们在列表中出现的顺序排列。
如果您想知道它们在列表中的实际数字,那么在单元格 L6 中输入以下公式并复制到 L15:
=MATCH(J6,$C$3:$C$103,0)
如果您想知道每个条目出现的实际行,那么在单元格 M6 中输入以下公式并复制到 M15:
=MATCH(J6,$C$3:$C$103,0)+ROW($C$3)-1
答案2
好的,我设法让它工作了,虽然有点复杂,但工作做得很好。必须将范围增加到 150 行才能覆盖要输入的数据。
我把所有的真/假都放在了 I 列,所以在 J 列中我只放了包含真值的行的行号......
=IF(I7=FALSE, "", ROW())
然后在 K 列中,我使用 RANK 函数分配我想要的 1-10 个数字。行号只会沿着列表向下增加,因此降序排列的 rank 函数可以正常工作。
=IF(J7="", "", RANK(J7,$J$7:$J$156, 1))
然后我能够使用 VLOOKUP 函数将这些 1-10 的数字与我想要提取的数据进行匹配,以填充工作表其他地方的 10 行表,以便绘制图形。
我确信有很多更好的方法可以做到这一点,但不幸的是我有一个完成它的最后期限,所以我可以稍后再重新审视它,看看是否可以改进它。
非常感谢这些帖子,因为它为我提供了其他尝试的方法,最终使它得以发挥作用。