Excel VBA宏根据各种搜索标准将列中的空字段更改为“已检查”(字符串)

时间:2017-05-25 05:08:45

标签: excel vba excel-vba

您好我是VBA Macros的新手,非常感谢您对此事的任何帮助。

我需要编写一个宏来根据不同的搜索标准将列的值更改为“已检查”。我的要求是其中一个列值必须根据搜索条件自动标记为已检查,搜索条件将在其他列的字符串值内的一列中搜索包含在字符串中的序列号的存在。

请帮我创建一个宏来完成这项任务。

我很遗憾地说,由于保密原因,我无法共享代码或附上屏幕截图以进一步解释该方案。

详细解释

要修改的列:注释(最初为空白)

用于搜索条件的列:可以是现有表中的任何列。

搜索条件:

  • 来自参考列的子字符串(基本上是一个带有6位数字的数字将被选为搜索关键字)

注意:此列后面没有特定的格式(我们对此无能为力)例如:在一列中,条目为35567890-DEF-GHJ,而在另一列中则为Ref:35567890--在另一个列字段中,它将类似于CEK 35567890.

  • 必须检查子字符串,不仅要检查相同coulmn中的条目,还要检查整个表的内容。基本上它就像excel中的find函数。

  • 如果找到匹配项,我需要将借方和贷方分录中的值相加,看看结果是否为0.如果结果为零,我需要在评论字段中输入“已选中”允许字符串值。

1 个答案:

答案 0 :(得分:1)

这不是一个完整的宏,但仍然可以完成工作。

仅用于提取产品代码的宏。对于剩余的进程,我使用现有的函数,在净量上执行比较函数,然后使用简单的if将列标记为check。

用于提取产品代码的宏。

Public Function getProductCode(source As String) As String

Dim rExp As Object, allMatches As Object, match As Object
Dim result As String: result = ""



Set rExp = CreateObject("vbscript.regexp")
With rExp
    .Global = True
    .MultiLine = False
    .Pattern = "(?:^|\D)(\d{7,8})(?!\d)"
End With


Set allMatches = rExp.Execute(source)
For Each match In allMatches
    result = result + match.SubMatches.Item(0)
Next
    getProductCode = result
End Function

然后创建了一个新列'Reference',在该列上使用宏传递特定列,并将提取的产品代码存储在此处。

在此之后,使用函数查找重复的条目并总结销售的产品总数。我使用的公式如下:

=ROUND(SUMIFS([Total],[Reference],[@Reference]),2)=0

最后,如果先前生成的结果(列状态)为真,我使用了一个简单的if将列标记为已检查。

=IF([@Column1]=TRUE, "Checked", "")

这就是我完成它的方式。

可能有更好的方法来做到这一点。但如果其他人面临同样的问题,这将有所帮助。