Excel 自动化我的银行对账单-使其动态化
我正在尝试创建一个宏来对我的银行对账单进行分类。但我对VBA不是很精通,我也不清楚如何解决这个问题 内容如下: 我将CSV导入excel,并将其分隔为列。这部分正在工作。看起来像这样:Excel 自动化我的银行对账单-使其动态化,excel,vba,Excel,Vba,我正在尝试创建一个宏来对我的银行对账单进行分类。但我对VBA不是很精通,我也不清楚如何解决这个问题 内容如下: 我将CSV导入excel,并将其分隔为列。这部分正在工作。看起来像这样: 我希望能够剪切相关事务并将它们粘贴到各自的表中。所以市政局进入市政局表格,银行进入银行表格,能源进入能源表格 我使用不同的银行,因此我有不同的CSV。所以布局一直在变化。有些银行在A列中有日期,有些银行在C列中有日期。因此,范围应该始终是动态的 我创建了一个键表,其中包含所有相关变量,这些变量可以与相关事务相匹
A
列中有日期,有些银行在C
列中有日期。因此,范围应该始终是动态的键可以在导入的范围内的某个地方找到。就像我之前说的,钥匙的位置会根据银行的不同而变化。我想说以下几点
如果键x
与import\u范围中的某个位置匹配,则将名称
、说明
和金额
从同一行剪切到与键类型相关的另一工作表中
因此,从图像中,如果在import\u范围内的某个地方找到了键21315665
(作为字符串?),那么我想要名称(互联网提供商)
,描述
和金额
,它们与同一行相关,并剪切粘贴到不同的行中(已经存在)表,将信息添加到所述表的底部
我希望任何人都能帮我解决这个问题。我有一个我写的工作代码,但更新起来很痛苦,而且非常基本。它只是比较keyx
是否在cellz
中,以及是否复制它
Dim myString As String
Dim incassovalue As String
Dim lastrow As Range
Dim Table As ListObject
Set Table = Sheets("Transactions").ListObjects("Energy")
Import_last_row = Sheets("Import").Range("A" & Rows.Count).End(xlUp).Row
For i = Import_last_row To 6 Step -1
'Energy
myString = Sheets("Import").Cells(i, 9).Value
incassovalue = Sheets("Incasso").Cells(5, 5).Value
If InStr(myString, incassovalue) > 0 Then
If Table.ListRows.Count > 0 Then
Set lastrow = Table.ListRows(Table.ListRows.Count).Range
If Application.CountBlank(lastrow) < lastrow.Columns.Count Then
Table.ListRows.Add
End If
End If
If Table.ListRows.Count = 0 Then
Table.ListRows.Add Position:=1
Set lastrow = Table.ListRows(1).Range
Else
Set lastrow = Table.ListRows(Table.ListRows.Count).Range
End If
Sheets("Import").Cells(i, 1).Copy Table.Range([Energy].Rows.Count + 1, 1)
Sheets("Import").Cells(i, 2).Copy Table.Range([Energy].Rows.Count + 1, 2)
Sheets("Import").Cells(i, 7).Copy Table.Range([Energy].Rows.Count + 1, 3)
Sheets("Import").Cells(i, 1).EntireRow.Delete
End If
Next i
Dim myString作为字符串
暗的,暗的,蓝的
将最后一行变暗为范围
将表设置为列表对象
集合表格=表格(“交易”)。列表对象(“能量”)
导入最后一行=工作表(“导入”).Range(“A”和Rows.Count).结束(xlUp).行
对于i=将最后一行导入到6步骤-1
“能量
myString=Sheets(“Import”).Cells(i,9).Value
incassovalue=板材(“Incasso”).单元格(5,5).值
如果InStr(myString,incassovalue)>0,则
如果Table.ListRows.Count>0,则
Set lastrow=Table.ListRows(Table.ListRows.Count).Range
如果Application.CountBlank(lastrow)
现在这种代码可以工作了,但它根本不是动态的,我必须制定一个像这样的1000
条件才能使它适用于我所有的银行账户。我希望这里的人能帮助我,或者给我一个正确的方向。1。有些银行在a栏有日期,有些银行在C栏有日期
这应该不会是一个问题,直到那时列的标题不会更改。您可以搜索Date
的标题以查找相关列。2.可以在导入范围中的某个位置找到该键,此处的内容相同。在标题保持不变之前,这也不应该是问题。