Excel / Categorization宏(公式)基于包含关键字

时间:2015-12-02 09:52:09

标签: excel vba excel-vba

现在我花了几天时间上下搜索,需要找到解决方案。

我看到两个线程,但两者都不是我正在寻找的东西,我承认,在VBA中不太好,我无法做出头脑或故事。

我拥有的: 我有4300行银行对账单。有多列,但1是重要的 - 描述。这个描述可能包含很多内容,但通常有一个关键词是至关重要的。大约96%可以自动化,3-4%只是偶尔手动编写。

我想要的是什么:

将读取列描述的VBA宏将匹配其中的一个关键字,其中包含Sheet2中的许多列表,列"关键字"然后在Column Category(sheet1)中写入从Sheet2上的Column Category中获取的分配的分类。

到目前为止我做了什么:

我发现只为我工作,能够实际复制的唯一方法就是使用公式:

=IF(ISNUMBER(SEARCH("KEYWORD",[Description])),"OUTPUT","")

上述公式重复多次,但这种情况变慢并且滞后于一切。除了难以理解。

它的工作但我需要更好的东西。所以 - >进入宏。在这里,我迷失了。

我发现@JohnBus​​tos的答案非常好: How to group excel items based on custom rules? 但不是真的为我工作。

我发现Tomk Dallimore的答案是我需要或想要的: Categorizing bank transactions in Excel

但我不能让头或者故事如何到达那里?他非常详细,但我迷失在复杂性上,因为你很聪明。

你能帮帮我吗?

我附上一个非常简单的例子,说明我在说什么。

http://1drv.ms/1Putpy5

请注意#1 我找到了一个新的公式,我加入了。 ' = IFERROR(LOOKUP(10 ^ 10,SEARCH(""& KeywordTable [In-keyword]&"","" & H29&""),KeywordTable [Out-keyword]),"")

但是,每次移动一个单元时,这也会影响CPU。我想如果我添加560个新行或者更好的话,它会抛出异常,但是会以1个poisition移动表。临时解决方案,但需要更复杂的东西。

*****可能是个糟糕的主意**** 为了加快宏的速度,你在答案中提供的宏就可以使它像自动日期填充宏一样工作: Private Sub Worksheet_Change(ByVal Target As Excel.Range)



With Target
            If .Count > 1 Then Exit Sub
            If Not Intersect(Range("B2:B100"), .Cells) Is Nothing Then
                Application.EnableEvents = False
                If IsEmpty(.Value) Then
                    .Offset(0, 3).ClearContents
                Else
                    With .Offset(0, 3)
                        .NumberFormat = "dd mmm yyyy hh:mm:ss"
                        .Value = Now
                    End With
                End If
                Application.EnableEvents = True
            End If
        End With
    End Sub




当然,我意识到我要求一些奇怪的东西,但如果发生这种情况,它将会非常快速并且非常有助于优化宏执行大量数据的速度。现在,我要计算4500行。在2个月内,这个数额将翻倍。

1 个答案:

答案 0 :(得分:0)

根据你的excel文件,这段代码可行:使用此代码在3个secondes中完成10'000行。

Traceback (most recent call last):
  File "/Users/mainuser/Downloads/test2.py", line 6, in <module>
    nx.draw_graphviz(G)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/networkx/drawing/nx_pylab.py", line 982, in draw_graphviz
    pos = nx.drawing.graphviz_layout(G, prog)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/networkx/drawing/nx_pydot.py", line 257, in graphviz_layout
    return pydot_layout(G=G,prog=prog,root=root,**kwds)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/networkx/drawing/nx_pydot.py", line 277, in pydot_layout
    D=P.create_dot(prog=prog)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pydot.py", line 1802, in <lambda>
    lambda f=frmt, prog=self.prog : self.create(format=f, prog=prog))
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pydot.py", line 1966, in create
    self.write(tmp_name)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pydot.py", line 1895, in write
    dot_fd = file(path, "w+b")
NameError: name 'file' is not defined