2014-10-17 113 views
1

我已經使用過這段代碼幾次了,但我總是在傳遞數組的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, [email protected], 212.661.6990/310.247.8630 
Go, White, Know 
Happy, Rock, Upbeat, Catchy 
+0

最有可能在BL的一個細胞不含有'人權委員會(10)'(** vbLf **),所以數組長度爲1('UBound'爲0)。你需要在使用之前確保'UBound(fullArray)> 2' 3。 – PatricK 2014-10-17 01:23:06

+0

不,它確定地註冊一個Chr(10)閱讀我的問題的最後部分。我可以通過更改它來確定它是否找到了分隔符。如果我使用Chr(10)作爲我的分隔符,它將返回所有分隔符。如果我使用諸如「%」之類的錯誤字符(在單元格中爲否),它會將整個單元格返回給我。埃爾戈,「斯普利特」必須承認細胞中的Chr(10)。儘管這是一個很好的想法。我已經測試過了。任何其他想法? – 2014-10-17 01:56:21

回答

3

您需要首先測試UBound以確認實際上有3行。 2的一個UBound(fullArray)表示三行。這是一個基於零的數組的例子。第三行結束於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 
+0

那是啓發,但不知道現在該做什麼。它失敗了'If'語句,並將原始單元格中的內容返回到「立即窗口」。我編輯了原始問題,以顯示我正在嘗試「拆分」的單元格中包含的內容的示例。通過你提供的'If'語句代碼,我不確定我在失敗時立即看到的是什麼。它應該是數組'fullArray'的最後一個空格,然後將原始值與右對齊? – 2014-10-17 07:08:54

+0

@JamieMarshall預期的結果是什麼?你能顯示一個截圖嗎? – 2014-10-17 07:34:34

+0

感謝您的三行示例;這是有幫助的,我希望我編輯的答案也是。 – 2014-10-17 08:10:47