string - 需要有关 Excel 和 VBA 字符串处理和存储限制的信息 - 以及建议的解决方法

标签 string excel vba dna-sequence

据此Microsoft blog post对于 MS Office 2010,每个单元格的最大字符串长度为 32k;我也通过测试证实了这一点。问题是我的字符串(DNA 序列)远高于该长度,并且我正在匹配整个 32k+ 序列上的 DNA 子序列,这些子序列可以匹配主序列上的任何位置;这意味着我不能简单地将主序列分解为 32k block ,因为我需要能够将“子字符串序列”与整个“主字符串序列”进行字符串匹配。不清楚的一件事是 VBA 是否支持处理大于 32k 的字符串,如果 VBA 支持超过 32k 的字符串连接,这可能是一种解决方法;这意味着我将“主字符串序列”分成 32k block 在一行到第 N 列,然后当我需要处理匹配时,只需将行中的字符串从第 1 列连接到第 N 列,处理匹配,然后转储存储在 VBA 中的临时“主字符串序列”。

所以,基本上问题是 MS-Office 2010 仅支持每个单元格长度不超过 32k 的字符串,而且我的字符串比需要以整个形式处理的字符串要大得多,以便字符串匹配工作。

最佳答案

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

关于string - 需要有关 Excel 和 VBA 字符串处理和存储限制的信息 - 以及建议的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4540063/

相关文章:

java - 将包含算术符号的字符串转换为整数值

excel - Matlab 数据预处理和动态结构分配

java - 如何使用 ODBC 获取 View 的 Lotus 数据库列名称

excel文件未保存到宏指定的文件路径

string - 加入 d 中的字符串数组

javascript - 使用 splice 方法时如何保留先前的数组

java - Ruby 中字符串池的良好实践

Excel-比较不同工作表中的两个单元格,如果为真则从其他单元格复制值

c# - 使用 npoi 单元格范围地址读取 excel

vba - 使用 Excel VBA 按列值对工作表数据进行排序