MS Excel 重新排序单元格中的字母

Jac*_*cek 1 excel excel-formula

我有一列包含格式内容的单元格ABCDP2S6_EFGHP2Te6_X_YY.Y_ZZZ

我想用公式命令来输出CDABP2S6-GHEFP2Te6

我用谷歌搜索了一下,似乎涉及 REPLACE 和 FIND,但找不到正确的方法。

有什么帮助吗?

Jvd*_*vdV 5

您可以尝试根据您的评论假设输入中每个值的长度相同:

在此输入图像描述

公式为B1

=CONCAT(MID("-"&A1,{4,2,6,1,13,11,15},{2,2,4,1,2,2,5}))
Run Code Online (Sandbox Code Playgroud)

这里我简单地使用整数数组来获取长度为 1、2、4 或 5 个字符的子字符串。为了避免有点冗长的公式和双重使用,MID()第一步是在输入中添加一个前导连字符,我们也可以在索引中引用它。这只会将所有其他字符向右移动一位;因此它们在输入中各自的位置也会改变。

根据文档,第二个参数应该告诉函数一个起始位置,而第三个参数将告诉函数从给定的起始位置开始的子字符串的长度。因此,您可以查看两个元素对数组。因此,第一个数组中的每个索引在第二个数组中的相同索引处都有一个对应项:

在此输入图像描述


如果这不能描绘出清晰的图片,只需跳过我们使用前导连字符的部分并使用原始输入,如下所示:

=CONCAT(MID(A1,{3,1,5},{2,2,4}),"-",MID(A1,{12,10,14},{2,2,5}))
Run Code Online (Sandbox Code Playgroud)

如果这还不够简单,那么写出每个单独的起始位置并每次提取一个字符:

=CONCAT(MID(A1,{3,4,1,2,5,6,7,8},1),"-",MID(A1,{12,13,10,11,14,15,16,17,18},1))
Run Code Online (Sandbox Code Playgroud)

一个合理的替代方案可能是TEXTPLIT()首先输入,然后应用相同的技巧,但这次带有尾随连字符:

=CONCAT(MID(TAKE(TEXTSPLIT(A1,,"_"),2)&"-",{3,1,5},{2,2,5}))
Run Code Online (Sandbox Code Playgroud)

  • @Jacek将这3个数组放入3列中:`{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19} `, `{-,A,B,C,D,P,2,S,6,_,E,F,G,H,P,2,T,e,6}`, `{9,3, 4,1,2,5,6,7,8,,12,13,10,11,14,15,16,17,18}`。现在从第三列的数字 1 开始。查看第一列,第一个结果数组的编号为 4,第二个结果数组的编号为 2,即 1 和 2 是连续的。现在转到第 3 列中的 3,在第 1 列中,您将找到 2,它是第一个结果数组的第二个数字,而 2 又是第二个结果数组的数字,因为只有 3 和 4 是连续的。现在转到第 3 个 5... (2认同)
  • 乍一看,我想*“什么?”*。但后来我开始剖析它,一切都水到渠成了。感谢这堂课。顺便说一句,你在哪个程序中制作了这张图片? (2认同)
  • @VBasic2008,老实说,只是一些 Excel 形状。 (2认同)