I’ve worked this code over a few times, but I always seem to have a problem with the Split
statement passing my array. Here’s a piece of code that’s not working and I can’t figure out why
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
It gives an Err-9, value out of range. It’s so weird. I’ve tested it a bunch of different ways and this is what I’ve found.
It will return the 1st piece of data in the array. I can change my delimiter to any thing i want and get exactly what I would expect in the first place of the array returned, if I change my code to fullArray(). I’ve also tried using Application.Index(fullArray, 1, 2), no dice. I’ve tried using various combination of array coordinates and variant/string combos. Nothing. Please help, I would greatly appreciate it.
Here is an example of what is contained in the cell being split;
To License Contact, [email protected], 212.661.6990/310.247.8630
Go, White, Know
Happy, Rock, Upbeat, Catchy
You need to test the UBound
first to verify there are actually 3 lines. A UBound(fullArray)
of 2 indicates three lines. This is an example of a zero based array. The third line ends up in fullArray(2)
.
If your input is three lines long you can get the split using:
fullArray(0)
fullArray(1)
fullArray(2)
Here is your adjusted code:
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
Tags: arraysexcel, function