当条目为实时数据链接时,将逗号分隔的数据从一个单元格分隔到多个单元格

当条目为实时数据链接时,将逗号分隔的数据从一个单元格分隔到多个单元格

我的 Excel 模型从某些交易软件导入实时数据。如果我插入以下公式,我将获得当前投标报价的详细信息,这些报价不断变化:

=RTD("rit2.rtd",, "tenderinfo", "1")

但是,这些数据在可用时会显示如下,投标到期后将返回到空白单元格:

4020, RETC, 23401, 2910

基本上,它是单元格中与一笔交易相关的数据列表,以逗号分隔。

我需要将每个值分成一个单独的单元格,以便可以在方程中使用它们。我不确定是否可以使用 Excel 中的“文本到列”功能,因为单元格的内容是一个链接,它会暂时显示当前的招标报价数据,直到到期。

你知道我该如何解决这个问题吗?

答案1

您可以使用文本函数 Left()、Mid() 和 Right() 从单元格中提取数据,即使单元格本身包含公式。文本函数将查看公式的结果并解析文本。

公式的具体参数取决于数据。例如,如果第一个值始终是四位数字,则您可以简单地使用

=Left(A1),4)

但如果第一个值可以有更少或更多的数字,那么您可能需要查找第一个逗号的位置并提取第一个逗号之前的文本:

=Left(A1,Find(",",A1)-1)

其它公式也将采用类似的方法。

如果您不想使用公式执行此操作,您可以使用 VBA 将单元格内容复制到另一个位置,然后使用“文本到列”对其进行解析。

答案2

編輯:

由于您尝试从公式单元格中拆分逗号分隔值,因此“文本到列”不适合这种情况。

笔记,

文本到列可以做到这一点,但它会破坏公式。

在此处输入图片描述

为了更好地尝试此公式,请将其写入适当的单元格中,并根据需要填充右侧和下方。

=TRIM(MID(SUBSTITUTE($A2, ",",  REPT(" ", 999)), (COLUMN(A:A)-1)*999+1, 999))

笔记, 根据需要调整公式中的单元格引用。

答案3

最简单的解决方案(在 2018 年或 1998 年是可行的)是创建一个命名范围并在其中设置一个公式Refers to:

=EVALUATE(A1)

假设数据被拉入 A1,并且您已选择要输出的单元格。如果有任何不同,请进行相应编辑。我使用了相对引用(“A1”与“$A$1”或“A$1”等),因此粘贴时选择的单元格非常重要。

在 2018 年,可能需要选择所有需要输出的单元格,然后输入{CSE}带有 ( Ctrl-Shift-Enter) 的公式。在 2021 年,它将SPILL自动执行。

EVALUATE()来自 Excel 4 宏集。您不能直接在单元格中使用它。它必须位于您在单元格中引用的命名范围内。

因此,由于使用带参数的命名范围非常复杂,您不能使用它来“包装”函数,RTD()就像您可能用其他函数包装它一样LEFT(),因此IFERROR()您需要将 =Named Range公式放在单独的单元格中。但是您希望为输入的各个部分设置单独的单元格,因此您似乎不介意使用额外的列。

RTD()但是,如果函数的参数位于适合该模式的单元格中,则可以使命名范围包装该函数。(与当前单元格处于相同的上下位置。因此,如果RTD()您的从第 31 行开始并向下延伸 100 个单元格,则各个参数或参数集将占用 100 个连续的列单元格,尽管它们的起始行可能非常不同。无论如何,这将输出信息,而没有显示 CSV 输入材料的列,只有分开的输出。

现在,在 2021 年 11 月,微软刚刚宣布组织可以将 Excel 4 宏从其 Excel 席位信任中心中排除。因此,在 30 年的出色工作之后,它们可能会慢慢消失,因为一些组织肯定会这样做,人们会开始说它们不起作用,当然,也不愿意与他们的组织负责人进行这场斗争。啊,好吧……

Excel 最好添加一个单元格端公式来执行该EVALUATE()操作。INDIRECT()没有任何替代方法。几十年来一直需要它,但我们不得不等待 15 年,以便FORMULATEXT()我们能够停止使用不同的 E4Macro 命令。我将在 15 年后死去,所以我希望这个命令更快……也许LAMBDA()会偶然做到这一点,有点像FILTERXML()可以从字符串中创建数组?看起来确实如此,但我们拭目以待。

顺便说一句,在SPILL-times 中,EVALUATE()它的作用FILTERXML()是拆分字符串,大多数情况下,而且更简单。

相关内容