我已经使用了几次这段代码,但是我似乎总是遇到传递我的数组的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
答案 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