您好我是VBA Macros的新手,非常感谢您对此事的任何帮助。
我需要编写一个宏来根据不同的搜索标准将列的值更改为“已检查”。我的要求是其中一个列值必须根据搜索条件自动标记为已检查,搜索条件将在其他列的字符串值内的一列中搜索包含在字符串中的序列号的存在。
请帮我创建一个宏来完成这项任务。
我很遗憾地说,由于保密原因,我无法共享代码或附上屏幕截图以进一步解释该方案。
详细解释
要修改的列:注释(最初为空白)
用于搜索条件的列:可以是现有表中的任何列。
搜索条件:
注意:此列后面没有特定的格式(我们对此无能为力)例如:在一列中,条目为35567890-DEF-GHJ,而在另一列中则为Ref:35567890--在另一个列字段中,它将类似于CEK 35567890.
必须检查子字符串,不仅要检查相同coulmn中的条目,还要检查整个表的内容。基本上它就像excel中的find函数。
如果找到匹配项,我需要将借方和贷方分录中的值相加,看看结果是否为0.如果结果为零,我需要在评论字段中输入“已选中”允许字符串值。
答案 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", "")
这就是我完成它的方式。
可能有更好的方法来做到这一点。但如果其他人面临同样的问题,这将有所帮助。