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

时间:2010-12-30 16:59:40

标签: excel excel-vba onlinebanking vba

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

交易全部采用以下格式(以逗号分隔的列):

0901XX 892XXXXX, 24/12/2010, CARD PAYMENT TO MICKEY MOUSE29.90 GBP ON 22-12-2010, -29.9

我遇到的问题是thrid列中的信息都是唯一的,因为包含了交易金额和日期 - “卡片支付给MICKEY MOUSE * 29.90英镑于2010年12月22日 *”。因此,我不得不单独对所有200多笔交易进行分类,这不符合我的心理健康。

我能想到的最佳解决方案是删除此列中的所有数字,并使用空值查找并替换所有冗余术语(“GBP ON”,“。”,“ - ”),但我是不知道怎么把它放在一起。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

以下内容对您有所帮助。我做了以下假设:

  1. 您最初以.csv格式获取网上银行详细信息
  2. 您的第三列的格式始终为TextDescription+Amount+Currency+Date
  3. 在.csv文件中,第三列是工作簿中的C列
  4. 请按照以下步骤操作:

    1. 打开.csv文件
    2. ALT + F11
    3. 打开VBE编辑器
    4. 选择插入>工具栏中的模块
    5. 在模块中粘贴以下代码,将光标放在代码中的任意位置,然后点击“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
      
    6. 这应该对C列中的每个项目执行以下操作:

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

      ... ...变为

      CARD PAYMENT TO MICKEY MOUSE
      

      请注意,代码的工作原理是在描述中查找数字的第一次出现并在此之后删除所有内容。这假设首次出现的数字总是表示价格。如果付款接收方在名称中有号码,则代码将失败,例如卡片支付给PHONES4U