为了节省一些时间,我正在尝试使每月的流程半自动化。因此,我们每月获取这些报告(在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中执行此操作(因为每个报表具有不同的文本)?
答案 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中执行此操作(因为每个报表具有不同的文本)?
否,您必须手动调整每张纸的选项,因为它们都不同。