3

程序

  • Excel 2013

目标

  • 使用数据验证的列表选项,从逗号分隔列表中创建一个单元内下拉列表
  • 使用数据验证的列表选项,从一个没有任何空格的干净值行创建一个单元内下拉列表,从一个不可避免地被空格污染的动态生成的行

限制

  • 没有 VBA、宏或其他错误 - 只有公式
  • 数据保存在一行中,而不是一列中。将数据转换为列会有些困难,我宁愿避免这样做

细节

我最初的计划是创建一个包含逗号分隔列表的单元格,然后将其用于创建数据验证列表。成功创建格式良好的逗号分隔列表后,您似乎无法简单地引用该列表并通过数据验证工具对其进行翻译,现在我需要找到一种替代方法。

数据保存在长行中(不是列,并且不能轻易转换为列),这是通过将其上方的各种值相加而生成的。这意味着两个值之间可能有很多空白 - 这是不可避免的。

以下网站有一个数组公式,可用于从列中删除空白单元格,但是我没有运气将其转换为适用于一行的公式: http ://www.cpearson.com/excel/NoBlanks.aspx

=IFERROR(INDEX(BlanksRange,SMALL((IF(LEN(BlanksRange),ROW(INDIRECT("1:"&ROWS(BlanksRange))))),ROW(A1)),1),"")

如果有人对连续完成这项工作有任何想法,我将不胜感激。它似乎需要的不仅仅是用 COLUMN() 替换 ROW() 函数——可能与 INDIRECT() 上的“1:”有关,尽管我不明白该公式是如何工作的。

与此同时,我将继续使用它,当然,如果有人对行数据或逗号分隔数据问题有任何其他非 VBA 解决方案,我会全力以赴。

编辑:为了澄清,上面的链接提供了一个解决方案,用于将一组垂直数据带入水平结果通道,但这对我的水平数据集没有帮助。

4

1 回答 1

1

这是你想要的吗?

=IFERROR(INDEX($A$1:$E$1,1,SMALL(IF(LEN($A$1:$E$1)<>0,COLUMN($A$1:$E$1),9.9E+100),COLUMN())),"")

我只是假设数据看起来像这样:
Data in Row1and apply formula in Row2.

结果Row2将是Row1没有空格的数据。

编辑1:

我看到你需要它Data Validation List>
所以我认为这就是你可能需要的:

并使用这个公式:

=IFERROR(TRANSPOSE(INDEX($A$1:$E$1,1,SMALL(IF(LEN($A$1:$E$1)<>0,COLUMN($A$1:$E$1),9.9E+100),ROW(A1)))),"")

希望这可以帮助。
我只是在猜测你想要什么,但这应该让你知道如何调整数组公式。

于 2014-01-13T03:29:52.343 回答