Joa*_*oao 5 worksheet-function microsoft-excel
在 Excel 工作表中:
A 列都填充了需要更新的随机文本值(例如,单词?/?句子)。
B 列和 C 列包含指定需要对 A 列进行的更改的字符串。 B 列用旧文本填充每个单元格,用新文本填充 C 列,每一行彼此对应,即,文本B1 需要替换为文本 C1,B2 需要更改为 C2 文本。在 B 列中,要替换的内容之一是 a "
。
B 列中没有重复值。不过,C 列中的单元格可能会重复。替换必须遵守它们的书写顺序。D列是结果。
A 列中的每个单元格都需要从 B1-C1、B2-C2、B3-C3 等经过这个替换,直到 BC 列中的替换命令结束。因此,在给出最终结果之前,A 列中的文本将更改多次,并且在所有更改后仅在 D 列中显示结果。
例子:
Cell A1: Hello!
Cell A2: How are you "John"?
Cell A3: "Nice! thanks"
Run Code Online (Sandbox Code Playgroud)
Cell B1: ! Cell C1: &
Cell B2: & Cell C2: .
Cell B3: " Cell C3: (empty)
Cell B4: ? Cell C4: #
Cell B5: Nice. thanks Cell C5: Fine, THANKS.
Run Code Online (Sandbox Code Playgroud)
因此,单元格 A1,即Hello!
,将被 B1-C1 更改,因此Hello&
。然后将更改 B2-C2 以更改临时结果,Hello&
因此将Hello.
. 然后将改变B3,C3,然后会做B4,C4,然后B5,C5,以及将会发生什么,因为"
在不存在Hello.
。
在此之后,结果 D1 是Hello.
。
然后它会做 A2 改变 B1-C1(无事可做),然后应用到这个会做 B2-C2(无事可做),然后 B3-C3 将导致How are you John?
(即,引号字符将被删除),然后将做 B4-C4 这将使How are you John#
,然后 B5-C5 在这里没有什么可做的。
所以结果 D2 是How are you John#
。
同理,A3 的值首先"Nice! thanks"
会从 B1-C1 变化,变成"Nice& thanks"
,然后 B2-C2 变成"Nice. thanks"
,然后 B3-C3 变成Nice. thanks
(同样,引号将被删除),然后在 B4-C4 和 B5 中无所事事-C5 将使其最终成为Fine, THANKS
D3。
结果:
D1: Hello.
D2: How are you John#
D3: Fine, THANKS.
Run Code Online (Sandbox Code Playgroud)
D 列中的公式是什么,用于在一行中进行多次替换,遵守 B 列和 C 列中的行顺序,允许 BC 列有 300 多行?(如果可能的话,我想要一个纯粹基于公式的解决方案,而不是 VBA。)
你可以做你所描述/说明的事情
\n\n=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1, B$1, C$1), B$2, C$2), B$3, C$3), B$4, C$4), B$5, C$5)\n
Run Code Online (Sandbox Code Playgroud)\n\n如果将以上内容放入单元格\xc2\xa0D1
并向下拖动/填充,\nA1
将更新为A2
、A3
等,\n但替换字符串参数(B$1
、C$1
、B$2
、C$2
等)\n不会改变。\xc2\xa0 \n我相信 \xe2\x80\x99 显然\n这会在 上执行B1
\xe2\x80\xaf\xe2\x86\x92\xe2\x80\xafC1
替换A1
,\n然后执行B2
\xe2\x80\xaf\xe2 \x86\x92\xe2\x80\xafC2
替换\n第一个替换的结果,\n然后执行B3
\xe2\x80\xaf\xe2\x86\x92\xe2\x80\xafC3
替换\n第二个替换的结果替换等。
这对于 5 次替换来说很尴尬,\n并且对于更多替换很快就会变得笨拙。\xc2\xa0\n如果您可能想要进行多次替换(例如,最多 312 个),\n请使用辅助列:
\n\n设置AA1
=SUBSTITUTE(A1, INDEX($B:$B, COLUMN()-COLUMN($Z1)), INDEX($C:$C, COLUMN()-COLUMN($Z1)))\n
Run Code Online (Sandbox Code Playgroud)\n\n这相当于=SUBSTITUTE(A1, B1, C1)
,\n但它动态获取B1
和C1
值\n通过获取列号 ( AA
\xe2\x80\xaf\xe2\x86\x92\xe2\x80\xaf27)\n并减去 26(列的列号\n) xc2\xa0 Z
),\n并使用结果 (1) 作为B
和\xc2\xa0C
列中的行号。
拖动/填充AA1
到AB1
,所以它变成
=SUBSTITUTE(B1, INDEX($B:$B, COLUMN()-COLUMN($Z1)), INDEX($C:$C, COLUMN()-COLUMN($Z1)))\n
Run Code Online (Sandbox Code Playgroud)\n\n并更改B1
为AA1
,所以它变成
=SUBSTITUTE(AA1, INDEX($B:$B, COLUMN()-COLUMN($Z1)), INDEX($C:$C, COLUMN()-COLUMN($Z1)))\n
Run Code Online (Sandbox Code Playgroud)\n\n这相当于=SUBSTITUTE(AA1, B2, C2)
,\nwhich\xc2\xa0is\xc2\xa0equivalent\xc2\xa0to\xc2\xa0 =SUBSTITUTE(SUBSTITUTE(A1, B1, C1), B2, C2)
。
AB1
到。\xc2\xa0\n这将是\n应用从到 的所有替换LZ1
的结果\n(因为是第 12 个字母,而 12\xc3\x9726 是 312)。A1
B1:C1
B312:C312
L
D1
为=LZ1
, 以反映所有替换的结果。D1
并向AA1:LZ1
下直到 column\xc2\xa0 中有数据A
。 归档时间: |
|
查看次数: |
410 次 |
最近记录: |