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
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