现在我花了几天时间上下搜索,需要找到解决方案。
我看到两个线程,但两者都不是我正在寻找的东西,我承认,在VBA中不太好,我无法做出头脑或故事。
我拥有的: 我有4300行银行对账单。有多列,但1是重要的 - 描述。这个描述可能包含很多内容,但通常有一个关键词是至关重要的。大约96%可以自动化,3-4%只是偶尔手动编写。
我想要的是什么:
将读取列描述的VBA宏将匹配其中的一个关键字,其中包含Sheet2中的许多列表,列"关键字"然后在Column Category(sheet1)中写入从Sheet2上的Column Category中获取的分配的分类。
到目前为止我做了什么:
我发现只为我工作,能够实际复制的唯一方法就是使用公式:
=IF(ISNUMBER(SEARCH("KEYWORD",[Description])),"OUTPUT","")
上述公式重复多次,但这种情况变慢并且滞后于一切。除了难以理解。
它的工作但我需要更好的东西。所以 - >进入宏。在这里,我迷失了。
我发现@JohnBustos的答案非常好: How to group excel items based on custom rules? 但不是真的为我工作。
我发现Tomk Dallimore的答案是我需要或想要的: Categorizing bank transactions in Excel
但我不能让头或者故事如何到达那里?他非常详细,但我迷失在复杂性上,因为你很聪明。
你能帮帮我吗?
我附上一个非常简单的例子,说明我在说什么。
请注意#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个月内,这个数额将翻倍。
答案 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