2014-11-17 48 views
0

我想将逗号分隔值(或任何分隔符)转置为数组中的多行。我看到的大多数示例都保存在excel文件中的范围值中。 任何请指教。vba将单行转换为数组中的多行

strFirstLine:

row1,row2,row3 

输出继电器在数组中,以便我能在每行上操作循环:

row1 
    row2 
    row3 

这里是我到目前为止的代码。我在debug.print部分添加了评论。

line = WorksheetFunction.Transpose(Split(strFirstLine, ",")) 

ctr = 0 
For ctr = LBound(line) To UBound(line) 
    Debug.Print LBound(line) --value is 1 
    Debug.Print UBound(line) --value is 13 
    Debug.Print CStr(line(LBound(line))) --this line fails with "Subscript out of Range" error 
Next ctr 

让我知道你是否需要更多的细节。任何想法将不胜感激!

+0

你不需要VBA为此,Excel的alredy做这个免费 –

+0

移调?是的,但是我需要对数据进行一些操作,因此我想将它保存在一个数组中并进行访问。 – mysticfalls

回答

1

可避免转置功能。只需使用拆分并定义要保存拆分值及其完成的行和列值。

检查这个代码:

Sub try() 
Dim Line() As String 
Dim ctr, rw, cl As Integer 

strFirstLine = "row1,row2,row3" 

Line = Split(strFirstLine, ",") 

ctr = 0 
rw = 1 
cl = 1 
For ctr = LBound(Line) To UBound(Line) 
    Cells(rw, cl) = Line(ctr) 
    rw = rw + 1 
Next ctr 

End Sub 
1

line这里是一个2-d阵列,所以你需要使用LBoundUBound时指定的尺寸,以及访问的值时,你需要两个索引:

line = WorksheetFunction.Transpose(Split("row1,row2,row3", ",")) 

Debug.Print LBound(line, 1), UBound(line, 1) '1,3 
Debug.Print LBound(line, 2), UBound(line, 2) '1,1 


For ctr = LBound(line, 1) To UBound(line, 1) 
    Debug.Print line(ctr, 1) 
Next ctr 
+0

谢谢!出于好奇,是否有理由在二维数组中做到这一点?这可以像一个列表或其他东西在一维数组中完成吗?这很好,但再次感谢。 – mysticfalls

+1

我出于某种原因假设你*想要*一个二维数组,但@Paresh J显示如何获得一维版本 –