分隔由vbNewLine分隔的string

我使用下面的代码来分隔用逗号(,)分隔的一组string,然后将输出保存在名为msg的stringvariables中。 variablesmsg中的string由vbNewLine

例如:原始string,例如水果,包含:苹果,芒果,橙色后应用的functionsplittext(fruits)variables现在味精包含:苹果< vbNewLine >芒果< vbNewLine >橙

现在,我想把这个msg的内容分隔到单元格(每个string)。 例如,芒果在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 

这里是你的macros重构给你描述的结果,没有任何循环。

 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 

请注意,将数组复制到一个范围需要一个2维数组,行x列。 转置是一个便利的function,将1个暗淡的arrays转换成2个暗淡的arrays

编辑

请注意,如果从单元格调用此函数作为用户定义的函数(UDF)(就像在示例文件中那样),它将会失败(如果从VBA Sub中调用它,它将起作用)。 这是因为UDF不能修改Excel中的任何东西,它只能返回到调用单元格(有一个相当复杂的解决方法,请参阅此答案) 。如果您删除With部分,它将作为UDF工作。

如果你试图将列表返回到多个单元格,请考虑使用数组函数。

你必须这样使用它:

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

您尝试写入单元格“A0”,因为“我”是在第一个循环零。 而这是不行的,因为没有单元格“A0”。 而且你有ActiveWorkbook的“s”。

Moosli