Excel VBA:从一列中的字符串中查找和删除多个值
Posted
技术标签:
【中文标题】Excel VBA:从一列中的字符串中查找和删除多个值【英文标题】:Excel VBA: Find and Delete Multiple Values from Strings in One Column 【发布时间】:2011-06-01 15:54:24 【问题描述】:背景:我需要清理我的银行对帐单的 CSV 文件,以便在在线财务报告工具中使用。
交易全部采用以下格式(以逗号分隔的列):
0901XX 892XXXXX, 24/12/2010, CARD PAYMENT TO MICKEY MOUSE29.90 GBP ON 22-12-2010, -29.9
我遇到的问题是第三列中的信息都是唯一的,因为包含了交易金额和日期 - “向 MICKEY MOUSE 支付卡*29.90 GBP ON 22-12-2010*”。因此,我不得不将所有 200 多笔交易单独分类,这不利于我的心理健康。
我能想到的最佳解决方案是从该列中删除所有数字,并找到所有冗余项(“GBP ON”、“.”、“-”)并将其替换为空值,但我是不知道如何将它们组合在一起。
任何帮助将不胜感激。
【问题讨论】:
是我,或者您没有从第三列指定要保留的内容。 数据最初是在 Excel 工作簿中,然后您保存为 .csv 以上传到在线工具吗? 也许你可以使用分析标题。例如,在 E1 中有“CARD PAYMENT”,在 C4 中有“CARD PAYMENT TO MICKEY MOUSE”,在 D4 中有货币价值,在 E4 中有一个公式,用于检查 C4 @ 文本中的标题字符串987654322@ 【参考方案1】:以下内容可能会对您有所帮助。我做出以下假设:
-
您最初是以 .csv 格式获取您的网上银行详细信息
第三列的格式始终为
TextDescription+Amount+Currency+Date
在 .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
【讨论】:
效果很好的残余!减去列为“在 LLOYDS TSB BANK PLC ATM 123 FULHAM BROADWAY LONDON 提取现金”的奇怪 ATM 取款,它绝对是完美的。顺便说一句,您编写的说明非常清楚,并且假设没有先验知识-真正的专家。荣誉。 您可能希望找到第一个小数点,然后备份 6 个字符并从那里开始查找第一个数字,而不是在第一个数字之后剥离。可能比描述中的句号更有可能获得数字。然后你应该在找到号码后退出。以上是关于Excel VBA:从一列中的字符串中查找和删除多个值的主要内容,如果未能解决你的问题,请参考以下文章
Excel VBA代码查找列中的最大单元格值并删除其下方的所有行
Excel vba将公式从一列自动填充到Excel中的最后一列