首页 > 解决方案 > 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 中执行此操作(因为每个报告都有不同的文本)?

标签: vbaexcel

解决方案


这是一个经典选项,您可以根据需要进行调整。现在我有点非正式地选择范围 - 我对你的文档格式不太了解,无法“自动”完成。根据工作表的大小/数量,您可以将其更改为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 中执行此操作(因为每个报告都有不同的文本)?

不,您必须手动调整每张工作表的选项,因为它们都是不同的。


推荐阅读