小编E33*_*E33的帖子

没有 VBA 的迭代/循环替代

精简问题:

如果我有一个“|#|#|#|...|#|”的串联字符串,我如何将乘数应用于每个数字并更新串联文本?例如,对于 |4|12|8|,乘以因子 2 并将连接的文本更新为 |8|24|16|。

背景

我有三列感兴趣。第一列包含日期,第二列包含数量或因子,第三列将数据连接为格式“|#|#|...|#|” (例如,|2|5|、|2|5|12|、|4|12| 等)。有时,需要对连接的数据应用乘数,并且需要相应地更新各个数字。

一个例子是——

Date        Amt     Concatenated Data
01/01/18    2       |2|
01/05/18    5       |2|5|
02/06/18    12      |2|5|12|
03/25/18    -3      |4|12|
03/31/18    8       |4|12|8|
04/01/18    F2      |8|24|16|  (factor of 2 applied)
04/15/18    12      |8|24|16|12|
04/01/18    F1/4    |2|6|4|3|  (factor of 1/4 applied)
Run Code Online (Sandbox Code Playgroud)

使用公式,如何将因子应用于连接数据并更新单个数字?

我受以下条件的约束:

  • Excel 2007,所以没有TEXTJOIN函数
  • 没有 VBA 或 UDF(由于安全策略)
  • 单个数字是动态的(即,我不能为 SUBSTITUTE 公式的“old_text”参数使用静态值)
  • 连接数据中单个数字的数量也是动态的(可能包含一个数字,也可能包含几十个不同的数字)

我可以使用数组公式提取单个数字。我什至可以将这些数字乘以因子以产生数组结果。但是,我无法重建连接的数据,因为 CONCATENATE 不适用于数组。我也试过 SUBSTITUTE,但我无法遍历“|” 分隔符。我只能替换给定的段(例如,将“|2|”的所有条目更改为“|4|”)。嵌套 SUBSTITUTE 或使用单个列将不起作用,因为它可能涉及数十个实例。

只是添加一些关于连接数据的信息:

  • Amt>0,则 value 连接到前一个连接值的末尾
  • Amt<0,开始减少连接值 (CV) 中的单个数字,直到达到减少量(例如,对于 |2|5|12| 和 Amt=-3,将 CV 减少到 |4|12|,即从第一段和第二段的 -1) …

excel concatenation excel-formula substitution

5
推荐指数
1
解决办法
321
查看次数