excel VBA - 从函数中重新生成可变长度数组

时间:2016-06-21 03:41:52

标签: excel vba excel-vba

我想模拟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

但要使用它,我必须预先定义函数调用单元格作为数组的一部分,这是固定大小,我不知道如何将可变数量的已解析字段返回到固定大小阵列。我想从上面的示例数据中得到:

enter image description here

但我得到的是:

enter image description here

请注意,空单元格必须为空 - 不要只看空(不是“”字符串)。

修改: 我怀疑我可能不得不创建一个 sub 来设置解析字段的值并清除缺少字段的剩余单元格(我总是最多有四个字段)而不是返回它们,但我不是很精通VBA。例如,获取两个单元格引用的内容,一个用于源引用,另一个用于解析字段的目标列表。然后从函数中调用它,我可以将其嵌入到工作表中。基于副作用的编程...

1 个答案:

答案 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