答案1
要解决此问题,您需要 VBA(宏):
怎么运行的:
- 按下Alt+F11或者右键点击工作表标签,然后从弹出菜单中单击查看代码。
- 复制&粘贴此代码为标准模块。
跑步宏。
Private Sub Worksheet_SelectionChange(ByVal rngSel As Range) Set rngTable = [I2:K17] If rngSel.Count > 1 Or Intersect(rngSel, rngTable) Is Nothing Then End For Each rngCell In rngTable rngCell.Interior.ColorIndex = IIf(rngCell.Value = rngSel.Value, 27, -4142) Next End Sub
注意:
- 在此代码中,
rngTable = [I2:K17]
单元格引用以及颜色代码27, -4142
都是可编辑的。
答案2
我会采取以下两种方法之一:
1) 使用查找表并尝试详尽地弥补愚蠢用户对同一事物所能想到的所有可能的变化,或者使用源数据并删除重复项以获取已知的愚蠢选项列表。这是我在迁移带有“职位”的联系人数据时必须做的事情 - 迄今为止的记录是 67 种不同的“总经理”的样式或拼写方式(MD、MD、M Dir、Manging Driector 等)。这种方法非常适合一次性处理历史数据 - 在我的情况下,一旦数据被迁移,我们就使用下拉选择列表来阻止用户在新系统中造成同样的老问题。
2) 使用一组规则来“丢弃”您认为没有必要区分匹配项的无关信息。一组嵌套的 SUBSTITUTE 函数用“”替换短字符串即可解决问题。首先替换标点符号,如 . - / :,然后替换诸如 (PVT) 和 Ltd 和 Limited 之类的东西 - 如果这些短字符串中的任何一个有歧义并且可能出现在另一个单词中,请在前面、后面或两者中加上空格。一个很好的例子是替换“Co ”但不替换“Co”,以避免以“mpany”或“bblers”结尾。将最外层的 SUBSTITUTE “ ”替换为“”(即最后删除空格)。这处理“ABC Foods”,但将空格留到最后,因此您仍然可以解析字符串而不会丢失单词。
我假设您认为“ABC Foods”与“ABC Foods (PVT) Ltd.”相同。
现在创建一个包含所有“正确”答案的列表。使用公式在左侧创建第二列,然后复制 > 粘贴特殊值以“展平”此列。现在在主数据中,使用替换将名称简化为最简格式,然后将其用作查找值以返回“正确”版本。您可以使用辅助列来表示替换项,也可以一次性完成所有操作。
这种方法需要多次尝试才能正确并发现所有可以安全丢弃的位,但是如果源数据将来可能包含新的、无法预料的错误,则该方法会更加稳健。
记住:如果你试图让它变得万无一失,那么就会有人去找一个更大的傻瓜。