gpt4 book ai didi

vba - 优化 VBA 文本搜索

转载 作者:行者123 更新时间:2023-12-04 20:38:33 24 4
gpt4 key购买 nike

我创建了一个用于文本分析的 VBA 代码,但在运行时遇到了问题。
我刚刚在 Google 上找到了关于使用 excel 内置函数的建议,但它并没有提高运行时间。

这是我使用 VBA 的问题。
我有一个大约 30k 单元格的列表,其中包含文本(平均一两个句子)和一个 1k 个关键字的列表,它们都有一个数字分数。
对于 30k 单元格中的每一个,我想查看该单元格包含哪些关键字,并计算找到的关键字的分数总和。

简而言之,这是我现在解决问题的方法:

  • 在 30k 文本单元上循环
  • 循环关键字
  • 检查关键字是否在文本单元格中,如果是,则添加关键字的分数

  • 我还尝试使用搜索内置功能:
  • 循环关键字
  • 在包含 30k 个文本单元的整个工作表上搜索关键字
  • 找到关键字后,在相应的单元格上添加分数。

  • 运行时间没有显着变化。

    您可以在下面找到我的第一种方法的代码:
    'Loop on all the 30k text cells
    For i = 2 To last_textcell

    'loop on the number of different category of scores, setting intial scores to zero.
    For k = 1 To nb_score - 1
    Score(k) = 0
    Next k

    j = 2

    'loop on the 1k keywords
    Do While j < last_keywords

    !search if the keyword is in the text cell
    If UCase(Sheets("DATA").Range("V" & i).Value) Like "*" & UCase(Sheets("Keywords").Range("A" & j).Value) & "*" Then

    'if the keyword is found, add the score of the keyword to the previous score
    For l = 1 To nb_score - 1
    Score(l) = Score(l) + Sheets("Keywords").Range("B" & j).Offset(0, l - 1).Value
    Next l

    End If

    j = j + 1

    Loop

    'paste the score
    For k = 1 To nb_categ - 1
    Sheets("DATA").Range("CO" & i).Offset(0, k - 1).Value = Score(k)
    Next k


    Next i

    您对如何提高性能有任何提示吗?

    非常感谢!

    最佳答案

    使用数组,A1:A3 中要搜索的数据,C1:C3 中的关键字和 D1:D3 中的分数

    可以在 E 列中使用以下数组
    =SUM(IFERROR(INDEX($D$1:$D$3,--(IF(NOT(ISERROR(SEARCH($C$1:$C$3,A1))),ROW($C$1:$C$3))),1),0))

    关于vba - 优化 VBA 文本搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38302157/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com