Excel - 来自分隔单元格的动态列表/从动态行中删除空白

时间:2014-01-12 16:56:10

标签: excel formulas array-formulas

程序

  • Excel 2013

目标

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

限制

  • 无VBA,宏或其他malarkey - 仅限公式
  • 数据保存在一行中,而不是列中。将数据转换为列有点困难,我宁愿避免这样做

详情

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

数据保存在一个长行(不是列,并且不能轻易地转换为列),这是通过对其上面的各种值求和而生成的。这意味着两个值之间可能存在大量空白 - 这是不可避免的。

以下网站有一个数组公式,可用于从列中删除空白单元格,但是我没有运气将其转换为适用于行的公式: 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:”有关,虽然我不明白公式是如何工作的。

在此期间我会继续玩它,当然如果有人对行数据或逗号分隔数据问题有任何其他NON-VBA解决方案,我都是耳朵。

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

1 个答案:

答案 0 :(得分: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())),"")

我只假设数据如下:
Row1中的数据并在Row2中应用公式。

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

<强> EDIT1:

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

使用这个公式:

=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)))),"")

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