Excel VBA:从一列中的字符串中查找和删除多个值
背景:我需要清理我的银行对账单的CSV文件,以便在在线财务报告工具中使用 交易记录均采用以下格式(以逗号分隔的列): 我遇到的问题是,第三列中的信息都是唯一的,因为包含了交易金额和日期——“2010年12月22日支付给米老鼠的卡*29.90英镑*”。因此,我被迫将所有200多笔交易单独分类,这与我的心理健康无关 我能想到的最佳解决方案是删除此列中的所有数字,并查找所有冗余项(“GBP ON”、“,”-”)并将其替换为空值,但我不确定如何将其组合在一起Excel VBA:从一列中的字符串中查找和删除多个值,excel,onlinebanking,vba,Excel,Onlinebanking,Vba,背景:我需要清理我的银行对账单的CSV文件,以便在在线财务报告工具中使用 交易记录均采用以下格式(以逗号分隔的列): 我遇到的问题是,第三列中的信息都是唯一的,因为包含了交易金额和日期——“2010年12月22日支付给米老鼠的卡*29.90英镑*”。因此,我被迫将所有200多笔交易单独分类,这与我的心理健康无关 我能想到的最佳解决方案是删除此列中的所有数字,并查找所有冗余项(“GBP ON”、“,”-”)并将其替换为空值,但我不确定如何将其组合在一起 任何帮助都将不胜感激。以下内容可能会对您有所
任何帮助都将不胜感激。以下内容可能会对您有所帮助。我做出以下假设:
text说明+金额+货币+日期
ALT+F11打开VBE编辑器
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
CARD PAYMENT TO MICKEY MOUSE29.90 GBP ON 22-12-2010
…变成
CARD PAYMENT TO MICKEY MOUSE
请注意,代码的工作原理是在描述中查找第一个出现的数字,然后去掉之后的所有内容。这假设第一次出现的数字总是表示价格。如果收款人的姓名中有号码,则代码将失败,例如,向电话4U支付卡费。以下内容可能会对您有所帮助。我做出以下假设:
text说明+金额+货币+日期
ALT+F11打开VBE编辑器
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
CARD PAYMENT TO MICKEY MOUSE29.90 GBP ON 22-12-2010
…变成
CARD PAYMENT TO MICKEY MOUSE
请注意,代码的工作原理是在描述中查找第一个出现的数字,然后去掉之后的所有内容。这假设第一次出现的数字总是表示价格。如果付款收件人的姓名中有数字,则代码将失败,例如,向PHONES4UIts 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个字符,然后从那里开始查找第一个数字。与描述中的句号相比,可能更容易获得数字。那么你应该在找到号码后退出。