分隔由vbNewLine分隔的字符串

时间:2012-04-02 06:57:21

标签: excel vba excel-vba

我正在使用下面的代码来分隔由逗号(,)分隔的一组字符串,然后将输出保存在名为msg的字符串变量中。变量msg中的字符串由vbNewLine分隔。

例如: 原始字符串例如是水果,包含:苹果,芒果,橙子 应用函数splittext(fruits)之后 现在变量msg包含:apple< vbNewLine>芒果< vbNewLine>橙

现在,我想将此msg的内容分隔为单元格(每个字符串)。 例如,芒果在A1中,苹果在A2中,橙色在A3中(在不同的纸上。

我尝试了'ActiveWorkbooks.Sheets("Sheet2").Range("A" & i).Value = Cs(i),(请参阅下面的代码)。但它不起作用。执行后,sheet2中的单元格保持不变。我真的需要你的帮助。感谢。

Function splittext(input_string As String) As String
      Dim SptTxt As String
    Dim Cs As Variant
    Dim CsL As Byte
    Dim CsU As Byte
    Dim i As Byte
    Dim col As Collection
    Set col = New Collection
    Cs = Split(input_string, ",")
    CsL = LBound(Cs)
    CsU = UBound(Cs)
    Dim msg As String

    For i = CsL To CsU
        ReDim arr(1 To CsU)
        col.Add Cs(i)
        msg = msg & Cs(i) & vbNewLine
        'ActiveWorkbooks.Sheets("Sheet2").Range("A" & i).Value = Cs(i)
    Next
    splittext = msg
End Function

2 个答案:

答案 0 :(得分:2)

这是你的宏重构,以给出你描述的结果,没有任何循环。

Function splittext(input_string As String) As String
    Dim Cs As Variant

    Cs = Split(input_string, ",")
    splittext = Join(Cs, vbNewLine)

    ' Put results into workbook
    With ActiveWorkbook.Sheets("Sheet2")
        Range(.[A1], .Cells(UBound(Cs) + 1, 1)).Value = Application.Transpose(Cs)
    End With
End Function

请注意,将数组复制到某个范围需要一个二维数组,即行x列。 Transpose是一个将1 dim数组转换为2 dim数组的便捷函数

修改

请注意,如果您将其称为来自单元格的用户定义函数(UDF)(就像您在示例文件中一样),它将失败(如果从VBA Sub调用它将起作用)。这是因为UDF无法修改Excel中的任何内容,它只能返回到调用单元格(有一个相当复杂的变通方法,请参阅this answer。)如果删除With部分,它确实可以用作UDF。

如果您要将列表返回多个单元格,请考虑使用数组函数。

答案 1 :(得分:0)

你必须这样使用它:

ActiveWorkbook.Sheets("Sheet2").Range("A" & i+1).Value = Cs(i)

您尝试写入单元格“A0”,因为“i”位于第一个循环零点。这是行不通的,因为没有单元格“A0”。 你有一个ActiveWorkbook的“s”。

Moosli