2010-12-27 6 views
1

Microsoft blog post에 따르면 MS Office 2010의 경우 셀당 최대 문자열 길이는 32k입니다. 또한 테스트를 통해이 사실을 확인했습니다. 문제는 제가 그 길이보다 훨씬 긴 문자열 (DNA 서열)을 가지고 있고, 32k + 시퀀스 전체에서 DNA의 서브 시퀀스를 매칭하고 있습니다. 이는 "기본 문자열 시퀀스"에 "하위 문자열 시퀀스"를 문자열 일치시킬 수 있어야하므로 기본 시퀀스를 32k 척으로 간단하게 나눌 수 없다는 것을 의미합니다. 한 가지 분명한 것은 VBA가 32k를 초과하는 문자열 연결을 지원하는 경우 VBA가 32k보다 큰 문자열 처리를 지원하는지 여부입니다. 즉, "main-string-sequence"를 N 번째 열의 한 행에 32k 청크로 덩어리로 만든 다음, 행 1의 문자열을 N 번째 행으로 연결하는 문자열을 연결해야 할 때 VBA에 저장된 temp "main-string-sequence"를 덤프하십시오.Excel 및 VBA 문자열 처리 및 저장 용량 제한에 대한 정보가 필요합니다. - 및 제안 된 해결 방법

기본적으로 MS-Office 2010은 최대 셀 길이가 32k 인 셀만 지원하며 문자열보다 전체 형식에서 처리해야하는 것보다 훨씬 큰 문자열을 가지고 있습니다. 일에 매치.

답변

5

VBA 동적 문자열 (Dim x As String)은 2^31자를 포함 할 수 있으므로 잘 작성해야합니다. 왜 당신이 세포에 쓰는지 모르겠습니다. 당신이 다른 어떤 이유로 인해 필요하지 않다면, 나는 VBA에서 그것을 모두 할 것입니다. 어디에서 끈을 잡을 지 확실하지 않습니다.

가짜 40,000 자의 DNA 시퀀스와 가짜 5 자의 부분 문자열을 만든 다음 코드가 하나씩 다른 부분을 찾습니다.

Sub FindDNASubString() 

    Dim lRnd As Long 
    Dim i As Long 
    Dim sMain As String 
    Dim sSub As String 
    Dim vaLetters As Variant 
    Dim lPos As Long 

    Const lUPPER As Long = 3 
    Const lLOWER As Long = 0 

    vaLetters = Array("A", "C", "T", "G") 

    'Create fake main string 
    For i = 1 To 40000 
     lRnd = Int((lUPPER - lLOWER + 1) * Rnd + lLOWER) 
     sMain = sMain & vaLetters(lRnd) 
    Next i 

    'create fake substring 
    For i = 1 To 5 
     lRnd = Int((lUPPER - lLOWER + 1) * Rnd + lLOWER) 
     sSub = sSub & vaLetters(lRnd) 
    Next i 

    'find position of sub in main 
    lPos = InStr(1, sMain, sSub) 

    MsgBox "Substring is at position " & lPos 

End Sub 
+0

(+1로 답변으로 선택되었습니다.) 감사합니다. 그 정보는 내가 제공 할 수있는 정보를 바탕으로합니다. 다시 한 번 감사드립니다! – blunders