我正在使用下面的代码来分隔由逗号(,)分隔的一组字符串,然后将输出保存在名为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
答案 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