答案 0 :(得分:5)
如果您具有Office 365 Excel,则使用此数组公式:
=TEXTJOIN(",",,TRIM(MID(SUBSTITUTE(A2,",",REPT(" ",99)),((LEN(A2)-LEN(SUBSTITUTE(A2,",",""))+1)-ROW($XFD$1:INDEX(XFD:XFD,LEN(A2)-LEN(SUBSTITUTE(A2,",",""))+1)))*99+1,99)))
作为数组公式,退出编辑模式时需要使用Ctrl-Shift-Enter而不是Enter进行确认。
如果没有Office 365 Excel,则可能只有vba。
答案 1 :(得分:3)
草率的UDF解决方案:
Function REVERSESTRING(original As Range, delim As String)
Dim i As Long, reversed As String, arr As Variant
arr = Split(original.Value, delim)
For i = UBound(arr) To 0 Step -1
reversed = reversed & arr(i) & ","
Next i
REVERSESTRING = Left(reversed, Len(reversed) - 1)
End Function
答案 2 :(得分:0)
纯单单元格公式适用于Excel 365;使用该版本不需要特殊的数组计算条目、VBscripts 或辅助列:
添加列标题
选择标题,然后按插入功能区选项卡上的表格图标
将下面的公式 1 和 2 复制到相应的列中
Original | # | Reversed
---------+-----+-----------
| {1} | {2}
将要反转的字符串放在第一列中。
(保存要处理的分隔字符串值)
将您的源数据放在此列中(如示例图片所示)
(计算分隔单元格中的项目数)
注意:(此列完全可选;它仅显示原始列中的项目数)
{1} <- 替换为公式 #1:
=LET(
existingDelimiter, ","
, originalValue, [@[Original]]
, SUM(
LEN(originalValue)
- LEN(
SUBSTITUTE(
originalValue
, existingDelimiter
, ""
)
)
)
+1
)
(注意:如果您的列表使用分隔符而不是逗号,或者如果您的表格的第一列将具有不同的名称,请使用为 下面的公式#2。)
(反转列表中分隔项的顺序;可选择更改分隔符)
{2} <- 替换为公式 #2:
=LET(
existingDelimiter, ","
, newDelimiter, ","
, originalValue, [@[Original]]
, SUBSTITUTE(
ARRAYTOTEXT(
LET(
list,
IFERROR(
FILTERXML(
"<t><s>"
& SUBSTITUTE(
originalValue
,existingDelimiter
,"</s><s>"
)
& "</s></t>"
, "//s"
)
,""
)
,SORTBY(
list,
SEQUENCE(
ROWS(list)
,1
,ROWS(list)
,-1
)
)
)
,0
)
, ", "
, newDelimiter
)
)
根据需要通过更改 existingDelimiter
、newDelimiter
和 originalValue
的值来调整您想要完成的公式。
A.要反转逗号分隔的字符串,请使用以下公式:
existingDelimiter, ","
, newDelimiter, ","
B.要反转 DNS 名称,请将 existingDelimiter
和 newDelimiter
的定义中的逗号替换为句点:
existingDelimiter, "."
, newDelimiter, "."
将 [@[Original]]
中的“Original”替换为您第一列的名称(如果不同)。
A.如果仅使用单个单元格而不是表格列作为输入,请将 [@[Original]]
替换为对该单元格的引用(例如 B2
):
, originalValue, B2
这使我们不需要循环、辅助列或 VBScript。
要从列表中提取特定术语,请在另一个表格列中使用以下公式:
(将termNumber中的数字改成想要的值):
=LET(
existingDelimiter, ","
, originalValue, [@[Original]]
, termNumber, "[2]"
, IFERROR(
FILTERXML(
"<t><s>"
& SUBSTITUTE(
originalValue
, existingDelimiter
, "</s><s>"
)
& "</s></t>"
, "//s"
& termNumber
)
, ""
)
)
示例:
需要:
不需要:
(*) 这可以在 没有Let 函数的情况下完成,但是使用 Let 可以减少编辑/重新调整计算的机会用户错误。
注意:当 Lambda 函数发布时(希望在 2021 年晚些时候) 那么这一切都可以包含在一个命名的工作表函数中
奖励:要编辑更复杂的 Excel 公式并突出显示代码(以及其他功能,例如自动意图和折叠),请尝试使用带有 {{3} } 编程语言支持。示例:
Swift (免费;跨平台)
Swift language VSCode extension (免费;仅限 Windows)
灵感来自(如果我忘记了某人,请道歉):