Excel VBA:从一列中的字符串中查找和删除多个值

Excel VBA:从一列中的字符串中查找和删除多个值,excel,onlinebanking,vba,Excel,Onlinebanking,Vba,背景:我需要清理我的银行对账单的CSV文件,以便在在线财务报告工具中使用 交易记录均采用以下格式(以逗号分隔的列): 我遇到的问题是,第三列中的信息都是唯一的,因为包含了交易金额和日期——“2010年12月22日支付给米老鼠的卡*29.90英镑*”。因此,我被迫将所有200多笔交易单独分类,这与我的心理健康无关 我能想到的最佳解决方案是删除此列中的所有数字,并查找所有冗余项(“GBP ON”、“,”-”)并将其替换为空值,但我不确定如何将其组合在一起 任何帮助都将不胜感激。以下内容可能会对您有所

背景:我需要清理我的银行对账单的CSV文件,以便在在线财务报告工具中使用

交易记录均采用以下格式(以逗号分隔的列):

我遇到的问题是,第三列中的信息都是唯一的,因为包含了交易金额和日期——“2010年12月22日支付给米老鼠的卡*29.90英镑*”。因此,我被迫将所有200多笔交易单独分类,这与我的心理健康无关

我能想到的最佳解决方案是删除此列中的所有数字,并查找所有冗余项(“GBP ON”、“,”-”)并将其替换为空值,但我不确定如何将其组合在一起


任何帮助都将不胜感激。

以下内容可能会对您有所帮助。我做出以下假设:

  • 您最初是以.csv格式获取网上银行详细信息的
  • 您的第三列的格式始终为
    text说明+金额+货币+日期
  • 在.csv文件中,第三列是工作簿中的C列
  • 遵循以下步骤:

  • 打开.csv文件
  • ALT+F11打开VBE编辑器
  • 从工具栏中选择插入模块
  • 在“粘贴以下代码”模块中,将光标放在代码中的任意位置,然后点击“F5”

    Sub CleanTransaction()
    Dim rng As Range, cl As Range
    Dim lastRow As Long, iChar As Long
    lastRow = Range("C1").End(xlDown).Row
    Set rng = Range("C1:C" & lastRow)
    
    
    For Each cl In rng
       For iChar = 1 To Len(cl)
           If IsNumeric((VBA.Mid$(cl, iChar, 1))) Then
               cl = VBA.Trim$(VBA.Left$(cl, iChar - 1))
           End If
       Next iChar
    Next cl    
    End Sub
    
  • 对于C列中的每个项目,应执行以下操作:

    CARD PAYMENT TO MICKEY MOUSE29.90 GBP ON 22-12-2010 
    
    …变成

    CARD PAYMENT TO MICKEY MOUSE
    

    请注意,代码的工作原理是在描述中查找第一个出现的数字,然后去掉之后的所有内容。这假设第一次出现的数字总是表示价格。如果收款人的姓名中有号码,则代码将失败,例如,向电话4U支付卡费。以下内容可能会对您有所帮助。我做出以下假设:

  • 您最初是以.csv格式获取网上银行详细信息的
  • 您的第三列的格式始终为
    text说明+金额+货币+日期
  • 在.csv文件中,第三列是工作簿中的C列
  • 遵循以下步骤:

  • 打开.csv文件
  • ALT+F11打开VBE编辑器
  • 从工具栏中选择插入模块
  • 在“粘贴以下代码”模块中,将光标放在代码中的任意位置,然后点击“F5”

    Sub CleanTransaction()
    Dim rng As Range, cl As Range
    Dim lastRow As Long, iChar As Long
    lastRow = Range("C1").End(xlDown).Row
    Set rng = Range("C1:C" & lastRow)
    
    
    For Each cl In rng
       For iChar = 1 To Len(cl)
           If IsNumeric((VBA.Mid$(cl, iChar, 1))) Then
               cl = VBA.Trim$(VBA.Left$(cl, iChar - 1))
           End If
       Next iChar
    Next cl    
    End Sub
    
  • 对于C列中的每个项目,应执行以下操作:

    CARD PAYMENT TO MICKEY MOUSE29.90 GBP ON 22-12-2010 
    
    …变成

    CARD PAYMENT TO MICKEY MOUSE
    

    请注意,代码的工作原理是在描述中查找第一个出现的数字,然后去掉之后的所有内容。这假设第一次出现的数字总是表示价格。如果付款收件人的姓名中有数字,则代码将失败,例如,向PHONES4U

    Its me卡付款,或者您没有在第三列中指定要保留的内容。数据最初是否保存在excel工作簿中,然后保存为.csv以上载到在线工具?也许您可以使用分析标题。例如,在E1中有“卡支付”,在C4中有“卡支付给米老鼠”,在D4中有货币价值,在E4中有一个公式,用于检查C4
    =IF(iError(FIND(E$1,$C4,1)),“”,$D4)
    Its me,或者您没有指定要从第三列中保留的内容。数据最初是否保存在excel工作簿中,然后保存为.csv以上载到联机工具?也许您可以使用分析标题。例如,在E1中有“卡式支付”,在C4中有“卡式支付给米老鼠”,在D4中有货币价值,在E4中有一个公式,用于检查C4
    =IF(ISERROR(FIND(E$1,$C4,1)),“”,$D4)
    文本中的头字符串,这非常有效!减去列为“伦敦劳埃德TSB银行ATM 123富勒姆百老汇”的零散ATM取款,这绝对是完美的。顺便说一句,你写的说明非常清楚,并且没有事先的知识-一个真正的专家。值得称赞。与其在第一个数字后删除,不如先找到第一个小数点,然后备份6个字符,然后从那里开始查找第一个数字。与描述中的句号相比,可能更容易获得数字。然后你应该在找到号码后退出。这太好了!减去列为“伦敦劳埃德TSB银行ATM 123富勒姆百老汇”的零散ATM取款,这绝对是完美的。顺便说一句,你写的说明非常清楚,并且没有事先的知识-一个真正的专家。值得称赞。与其在第一个数字后删除,不如先找到第一个小数点,然后备份6个字符,然后从那里开始查找第一个数字。与描述中的句号相比,可能更容易获得数字。那么你应该在找到号码后退出。