需要有关Excel和VBAstring处理和存储限制的信息以及build议的解决方法

根据微软博客文章 ,MS Office 2010的最大string长度为32k; 我也通过testing证实了这一点。 问题是我的DNA(DNA序列)远远超过了这个长度,我在整个32k +序列上匹配了DNA的子序列,这个序列可以匹配主序列的任何地方; 这意味着我不能简单地将主序列分成32k个卡盘,因为我需要能够将“子串序列”与整个“主串序列”进行string匹配。 有一点不清楚的是,如果VBA支持处理大于32k的string,如果VBA支持超过32k的string连接可能是一个工作; 这意味着我把“主串序列”分成一行到第N列的32k块,然后当我需要处理一个匹配时,把第1列到第N列中的一行中的string连接起来,匹配,然后转储存储在VBA中的临时“main-string-sequence”。

所以,基本上这个问题是MS-Office 2010只支持长达32k的string,而且我的string比那些为了string匹配而需要处理的string要大得多。

VBAdynamicstring(Dim x As String)可以容纳2 ^ 31个字符,所以你应该很好。 我不知道你为什么写他们的细胞。 除非您需要其他原因,否则我会在VBA中完成这一切。 不清楚你在哪里得到string。

这里有一些代码可以产生一个假的40,000个字符的DNA序列和一个假的5个字符的子string,然后找出其中一个在哪里。

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