VBA-按顺序分类文本

时间:2018-07-02 19:50:19

标签: excel vba excel-vba

为了节省一些时间,我正在尝试使每月的流程半自动化。因此,我们每月获取这些报告(在Excel中),列表看起来像这样:

  Amount | Category | Text
     30  |  Blank   | BSP
     70  |  Blank   | PSP
   -350  |  Blank   | Accounting of
    100  |  Blank   | Payment

因此,我们需要按字母顺序对每个Text进行字母分类。在此示例中,我们将BSPPSP都标记为“ A”,将Accounting of标记为“ B”,下一个文本项标记为“ C”,依此类推。

示例:

enter image description here

是否可以在没有预定列表或字典的情况下在VBA中执行此操作(因为每个报表具有不同的文本)?

1 个答案:

答案 0 :(得分:0)

这是一个经典选项,您可以根据需要进行调整。现在,我有点非正式地选择范围-我对您的文档格式了解不多,无法“自动”进行操作。根据工作表的大小/数量,您可以将其更改为Selection.Cells,这将在工作表中突出显示的单元格上操作宏(我只会突出显示B列中所有您正在调整的信息)。 / p>

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中执行此操作(因为每个报表具有不同的文本)?

否,您必须手动调整每张纸的选项,因为它们都不同。