Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 自动化我的银行对账单-使其动态化_Excel_Vba - Fatal编程技术网

Excel 自动化我的银行对账单-使其动态化

Excel 自动化我的银行对账单-使其动态化,excel,vba,Excel,Vba,我正在尝试创建一个宏来对我的银行对账单进行分类。但我对VBA不是很精通,我也不清楚如何解决这个问题 内容如下: 我将CSV导入excel,并将其分隔为列。这部分正在工作。看起来像这样: 我希望能够剪切相关事务并将它们粘贴到各自的表中。所以市政局进入市政局表格,银行进入银行表格,能源进入能源表格 我使用不同的银行,因此我有不同的CSV。所以布局一直在变化。有些银行在A列中有日期,有些银行在C列中有日期。因此,范围应该始终是动态的 我创建了一个键表,其中包含所有相关变量,这些变量可以与相关事务相匹

我正在尝试创建一个宏来对我的银行对账单进行分类。但我对VBA不是很精通,我也不清楚如何解决这个问题

内容如下:

我将CSV导入excel,并将其分隔为列。这部分正在工作。看起来像这样:

  • 我希望能够剪切相关事务并将它们粘贴到各自的表中。所以市政局进入市政局表格,银行进入银行表格,能源进入能源表格
  • 我使用不同的银行,因此我有不同的CSV。所以布局一直在变化。有些银行在
    A
    列中有日期,有些银行在
    C
    列中有日期。因此,范围应该始终是动态的
  • 我创建了一个键表,其中包含所有相关变量,这些变量可以与相关事务相匹配,如下所示:
  • 键可以在导入的
    范围内的某个地方找到。就像我之前说的,钥匙的位置会根据银行的不同而变化。我想说以下几点

    如果键
    x
    import\u范围中的某个位置匹配,则将
    名称
    说明
    金额
    从同一行剪切到与键类型相关的另一工作表中

    因此,从图像中,如果在
    import\u范围内的某个地方找到了键
    21315665
    (作为字符串?),那么我想要
    名称(互联网提供商)
    描述
    金额
    ,它们与同一行相关,并剪切粘贴到不同的行中(已经存在)表,将信息添加到所述表的底部

    我希望任何人都能帮我解决这个问题。我有一个我写的工作代码,但更新起来很痛苦,而且非常基本。它只是比较key
    x
    是否在cell
    z
    中,以及是否复制它

    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.
    可以在导入范围中的某个位置找到该键,此处的内容相同。在标题保持不变之前,这也不应该是问题。