vba - VBA - 按顺序根据文本进行分类
问题描述
我正在尝试半自动化这个每月流程以节省一些时间。因此,我们每月都会获得这些报告(在 Excel 中),列表如下所示:
Amount | Category | Text
30 | Blank | BSP
70 | Blank | PSP
-350 | Blank | Accounting of
100 | Blank | Payment
所以我们需要Text
按顺序用一个字母对每个进行分类。在此示例中,我们将BSP
和标记PSP
为“A”,标记Accounting of
为“B”,下一个文本项标记为“C”,依此类推。
例子:
是否可以在没有预先确定的列表或字典的情况下在 VBA 中执行此操作(因为每个报告都有不同的文本)?
解决方案
这是一个经典选项,您可以根据需要进行调整。现在我有点非正式地选择范围 - 我对你的文档格式不太了解,无法“自动”完成。根据工作表的大小/数量,您可以将其更改为Selection.Cells
将在工作表中突出显示的单元格上操作宏(我只会突出显示包含您正在调整的信息的所有 B 列)。
Sub Henry()
Dim cel As Range
For Each cel In Range("C2:C7").Cells 'picking this range statically based on picture
Select Case LCase$(cel.Value2)
Case "bsp", "psp"
cel.Offset(0, -1).Value2 = "A"
Case "accounting of"
cel.Offset(0, -1).Value2 = "B"
Case "debit memo"
cel.Offset(0, -1).Value2 = "C"
'... other cases if necessary...
Case Else 'default case if necessary - can be "error" or "not found", etc
cel.Offset(0, -1).Value2 = "..."
End Select
Next cel
End Sub
根据开放式结束的方式,您可能必须使用该InStr()
功能。True
如果在另一个字符串中找到预定字符串,则返回。我包括了这个,因为在图像的第二个表中,一行包含的不仅仅是"BSP"
我以前的解决方案
Sub Henry()
Dim cel As Range
Dim temp As String
For Each cel In Range("C2:C7").Cells 'picking this range statically based on picture
temp = LCase$(cel.Value2)
Select Case True
Case InStr(temp, "bsp") > 0 Or InStr(temp, "psp") > 0
cel.Offset(0, -1).Value2 = "A"
Case InStr(temp, "accounting of") > 0
cel.Offset(0, -1).Value2 = "B"
Case InStr(temp, "debit memo") > 0
cel.Offset(0, -1).Value2 = "C"
'... other cases if necessary...
Case Else 'default case if necessary - can be "error" or "not found", etc
cel.Offset(0, -1).Value2 = "..."
End Select
Next cel
End Sub
是否可以在没有预先确定的列表或字典的情况下在 VBA 中执行此操作(因为每个报告都有不同的文本)?
不,您必须手动调整每张工作表的选项,因为它们都是不同的。
推荐阅读
- typescript - TypeError: mongoose__WEBPACK_IMPORTED_MODULE_15___default.a.connect 不是函数
- linux - 为什么我可以设置超过硬件设置的最大数量的 qdisc 队列?
- python-3.x - 如何在 pyQt5 应用程序中应用多线程
- python - 如何在django中保留图像文件
- android - 离子 - 科尔多瓦插件的电容器问题
- unity3d - Unity IAP 与新的 google IAP 版本 3 Null 参考
- python - NBConvert 将单元格与第二个数据源匹配
- c++ - 编译 C++Builder 6 项目时出现“未解决的外部”错误
- javascript - Paperjs android捏入和捏出添加线条/笔触
- c++ - 在 cmake mono 存储库中包含 cppitertools 的正确方法