给定任何数字字符串,我想使用Excel 2010中的公式生成所有字符串前缀的数组。
示例(INPUT - > OUTPUT):
"12345" -> {"12345","1234","123","12","1"}
"6524" -> {"6524","652","65","6"}
"1" -> {"1"}
输出顺序对我很重要,但对于这个问题没有必要作为答案,因为有可用的排序公式我可以在之后应用于输出。
错误的输入(例如空字符串,错误值或其他)应该返回一个空数组,一些错误值或其他同样明显的输出,以显示由于输入错误导致公式失败。
必须适用于可变长度输入字符串。我不接受假设固定长度输入的答案。
必须是Excel公式(因此是excel-formula标记),而不是依赖于VBA宏。我可以编写一个执行此操作的宏,但出于我的目的,我需要一个公式。
必须在Excel 2010中工作(因此excel-2010标记)。
替代
如果你知道如何生成这样的输出:
"12345" -> {5,4,3,2,1}
"6524" -> {4,3,2,1}
"1" -> {1}
甚至只是:
"12345" -> {1,1,1,1,1}
"6524" -> {1,1,1,1}
"1" -> {1}
这也有很大帮助,因为我相信这些可以作为获得解决方案的中间步骤。它是基于输入字符串长度的可变长度输出数组,让我卡住了。
答案 0 :(得分:4)
如果您的值是A4
=TRANSPOSE(MID(A4,1,ROW(OFFSET($A$1,0,0,LEN(A4),1))))
将为您提供一个长度为1到完整数字的所有子串的数组。
在VBA中:
Sub tester()
Dim v, x
v = Application.Evaluate("=TRANSPOSE(MID(A4,1,ROW(OFFSET($A$1,0,0,LEN(A4),1))))")
For x = LBound(v) To UBound(v)
Debug.Print x, v(x)
Next x
End Sub