我想模拟UDF函数中内置“text-to-fields”的结果。 我需要这样做,因为我的原始数据来自Web查询,我需要在单独的页面上使用结果并绘制这些结果。 对于绘图,我需要缺少值来解析空单元格,因为这是excel图形显示缺失值作为间隙的唯一选项。
由于两个限制,你无法使用内置功能;
1)它无法将已解析的字段定位到另一张工作表上。
2)尝试将数据值复制到目标表以解析它们失败,因为text-to-fields解析引用表达式而不是它引用的值。
3)我无法解析原始数据表,然后将解析后的字段复制到目标工作表,因为没有表达式可以复制空单元格,它会转换为零值。 (毕竟,导致空单元格的表达式会自行擦除!)
所以我需要一个DIY字段解析器,在任何情况下使用公式都比我的整体需求更好,而不是宏观化内置函数(即使它可以工作)。
我的字段看起来像这样:
calm
S 10
S 10 G 20
我希望它们像文本到字段一样进行解析,这将为数字提供数字,为文本提供字符串,为缺少的字段提供空(即更短的读数。)
所以我使用了这段代码;
Function Explode(texte As String, Optional ByVal delimiter As String = " ") _
As String()
' mimic the text-to-fields,
' but allow inter-sheet references
Explode = Split(texte, delimiter)
End Function
但要使用它,我必须预先定义函数调用单元格作为数组的一部分,这是固定大小,我不知道如何将可变数量的已解析字段返回到固定大小阵列。我想从上面的示例数据中得到:
但我得到的是:
请注意,空单元格必须为空 - 不要只看空(不是“”字符串)。
修改: 我怀疑我可能不得不创建一个 sub 来设置解析字段的值并清除缺少字段的剩余单元格(我总是最多有四个字段)而不是返回它们,但我不是很精通VBA。例如,获取两个单元格引用的内容,一个用于源引用,另一个用于解析字段的目标列表。然后从函数中调用它,我可以将其嵌入到工作表中。基于副作用的编程...
答案 0 :(得分:0)
您可以使用Redim Preserve使函数返回固定的数组大小。
{=爆炸($ A $ 1,50,"")}
Function Explode(texte As String, ArraySize As Integer, Optional ByVal delimiter As String = " ") _
As String()
Explode = Split(texte, delimiter)
ReDim Preserve Explode(ArraySize- 1)
End Function