拆分函数不创建数组()

时间:2014-10-17 01:06:16

标签: arrays excel vba

我已经使用了几次这段代码,但是我似乎总是遇到传递我的数组的Split语句的问题。这是一段不起作用的代码,我无法弄清楚为什么

Private Sub parseCSV()
'Parse "Notes" column and return Moods/Keywords to their apropriate cells

    Dim CSV As String
    Dim fullArray() As String
    Dim lRow As Long
    Dim Keywords As String
    Dim Moods As String

    Dim i As Long

    lRow = ActiveSheet().Range("BL" & ActiveSheet().Rows.Count).End(xlUp).Row

    For i = 3 To lRow

        CSV = ActiveSheet.Range("BL" & i)
        fullArray() = Split(CSV, Chr(10))

        ActiveSheet.Range("CE" & i).Value = fullArray(3)
        ActiveSheet.Range("CD" & i).Value = fullArray(2)

    Next i

End Sub

它给出了Err-9,超出范围的值。这太奇怪了。我已经测试了很多不同的方法,这就是我发现的。

它将返回数组中的第一个数据。如果我将代码更改为fullArray(),我可以将分隔符更改为我想要的任何内容并获得我所期望的返回数组的第一个位置。我也尝试过使用Application.Index(fullArray,1,2),没有骰子。我尝试过使用各种阵列坐标和变体/字符串组合的组合。没有。请帮助,我将不胜感激。

以下是要拆分的单元格中包含的内容的示例;

To License Contact, licensing@primarywavemusic.com, 212.661.6990/310.247.8630
Go, White, Know
Happy, Rock, Upbeat, Catchy

1 个答案:

答案 0 :(得分:3)

您需要首先测试UBound以验证实际上有3行。 UBound(fullArray)为2表示三行。这是基于零的数组的示例。第三行最后在fullArray(2)

如果您的输入为三行,则可以使用以下方式进行拆分:

fullArray(0)
fullArray(1)
fullArray(2)

以下是您调整后的代码:

For i = 3 To lRow

    If UBound(fullArray) >= 2 Then
        CSV = ActiveSheet.Range("BL" & i)
        fullArray() = Split(CSV, Chr(10))

        ActiveSheet.Range("CE" & i).Value = fullArray(2) 'enter third line
        ActiveSheet.Range("CD" & i).Value = fullArray(1) 'enter second line
    Else
        'this will output the cell address of any cell that
        'doesn't have 3 lines within the cell
        Debug.Print ActiveSheet.Range("BL" & i).Address
    End If

Next i