2014-10-14 3 views
0

VBA에 비교적 익숙하지 않아서 단일 셀에 포함 된 CSV 정보를 구문 분석하여 특정 데이터를 스프레드 시트의 다른 셀로 반환하는 Sub를 작성했습니다. 그 비교적 간단한 코드지만 오류를 찾을 수 없습니다. 그것의 오류 13 불일치 라인에 Moods = Application.Index(fullArray, 0, 3) 어떤 도움을 주시면 대단히 감사하겠습니다.VBA 일치하지 않는 오류 13

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

    Dim CSV As String 
    CSV = ActiveSheet.Range("BL5") 

    Dim fullArray As Variant 
    fullArray = Split(CSV, Chr(10)) 

    Dim Moods As Variant 
    Moods = Application.Index(fullArray, 0, 3) 

    Dim Keywords As Variant 
    Keywords = Application.Index(fullArray, 0, 2) 

    ActiveSheet.Range("CD5").Value = Moods 
    ActiveSheet.Range("CE5").Value = Keywords 

End Sub 

가 잘 작동 :

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

    Dim CSV As String 
    Dim fullArray As Variant 
    Dim lRow As Long 
    Dim Keywords As Variant 
    Dim Moods As Variant 
    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)) 
     Moods = Application.Index(fullArray, 0, 3) 
     Keywords = Application.Index(fullArray, 0, 2) 

     ActiveSheet.Range("CD" & i).Value = Moods 
     ActiveSheet.Range("CE" & i).Value = Keywords 

    Next i 

End Sub 

나는 아래의 구문 분석 기능을 테스트했다. 그래서 루프를 테스트했습니다.

Private Sub loopTest() 

    Dim i As Long 
    Dim lRow As Long 
    lRow = ActiveSheet().Range("BL" & ActiveSheet().Rows.Count).End(xlUp).Row 


    For i = 3 To lRow 
     ActiveSheet.Range("CD" & i).Value = "testing" 
    Next i 

End Sub 

잘 작동합니다. 나는 여기서 어디로 가야할지 모르겠다.

답변

0

알았습니다. 모든 도움을 주셔서 감사합니다. 이것은 뇌의 파괴자였습니다. 전체 열을 지정하는 동안 어떤 이유

Moods = Application.Index(fullArray, 0, 3) 
Keywords = Application.Index(fullArray, 0, 2) 

이 값을 리턴하지 않을 것이다 ((0, 0) = VBA 어레이의 열에서 모든 행). 간단히 배열 참조를 (1, 3) 및 (1, 2)로 변경했습니다. 전체 작업 코드는 다음과 같습니다. 이것은 셀에서 데이터를 파싱하고 배열을 슬라이스하기 위해 온라인에서 찾은 가장 간단한 방법입니다. 이 일을 도와 준 모든 분들께 감사드립니다.

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

    Dim CSV As String 
    Dim fullArray As Variant 
    Dim lRow As Long 
    Dim Keywords As Variant 
    Dim Moods As Variant 
    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)) 
     Moods = Application.Index(fullArray, 1, 2) 
     Keywords = Application.Index(fullArray, 1, 3) 

     ActiveSheet.Range("CE" & i).Value = Moods 
     ActiveSheet.Range("CD" & i).Value = Keywords 

    Next i 


End Sub 
+0

이 게임을 너무 빨리 호출합니다. 이 기능은 내 PC의 Excel 2007에서는 작동하지만 내 Mac의 Excel 2011에서는 작동하지 않습니다. 이것에 대한 아이디어. Excell 2011에서 'fullArray = Split (CSV, Chr (10))'문이 내 데이터를 파싱하지 않고 배열로 전달하는 것처럼 보입니다. 셀의 데이터가 "A (줄 바꿈) B (줄 바꿈) C"인 경우에만 A 배열이 내 배열로 전달되는 것 같습니다 . –

+0

Mac/Office 2011에서 해결 된 유일한 줄 바꿈 참조 FullArray = Split (CSV, Chr (10))'을 fullArray ='Split (CSV, vbNewLine)'으로 변경하면 효과적입니다. –

1

값을 지정하기 전에 CSV을 사용하고 있습니다.

+0

빠른 답장을 보내 주셔서 감사합니다. 코드는 재 배열했지만 시가는 아닙니다. 같은 줄에서 여전히 동일한 불일치 오류가 발생합니다. 그래도 좋은 캐치였다. 위 질문의 변경 사항을 반영하도록 편집되었습니다. –

+0

@JamieMarshall 확인해야 할 다음 것은 : "먹이를주고있다"* Index() * 문자열 배열. 숫자 배열이 필요할 수 있습니다 ?? –

+0

생각해 줘서 고마워.하지만 필자는 내가 파스 함수를 테스트했을 때 그것을 테스트했다. 'fullArray' 변수는 배열을 Variant로 저장하여 Index()에 전달합니다. 그게 효과가 있습니다. 그러나 나는 당신의 코멘트를 읽은 후에 셀의 실제 데이터를 테스트했다. 나는 또한 루프를 5 번 반복으로 제한했다. (그래서 나는 데이터가 좋았다는 것을 안다.) 주목. –

관련 문제