奇怪的 Excel 价值不平等
Bizarre Excel value inequality
我从外部来源获得了一个关于供应商信息的 excel 数据源文件。我将值复制并粘贴到我自己的 XLSM 和 运行 数据上的一些 VBA 脚本中。简而言之,该脚本聚合数据,删除重复行,在 A 列中留下一个唯一供应商编号列表,其中包含每个供应商的聚合数据。然后脚本将数据上传到其他部门的 SQL 数据库中。
昨天在上传时,我的数据库吐出一个错误,声称 INSERT 尝试使用重复值,但不允许重复。奇怪...我回到 excel 数据并按供应商编号排序,发现有大量重复行。什么?这以前从未发生过。
我突出显示了排序列 A 并将其复制到另一个 sheet,然后使用删除重复项工具。 Excel 报告说没有重复,当我真的盯着 10 个重复供应商编号的案例时。不幸的是,这是一个 TEXT 列,因为其他供应商编号中有字母,例如 AX6058
顶部的两个单元格 A1 和 A2 显示供应商编号 7003 和 7003。作为测试,当我说 =A1=A2 时测试 returns FALSE。
我确保两个单元格都是 TEXT... =A1=A2 仍然 returns FALSE
我将两个单元格都更改为 GENERAL... =A1=A2 仍然 returns FALSE
我 TRIM()' 了两个单元格的空格... =A1=A2 仍然 returns FALSE
我测试了两个单元格的 LEN()...它们都是 4
我强制两个单元格都是没有小数的 NUMBER,=A1=A2 仍然是 FALSE!!
如果我将 1 加到 7003 = 7004,然后减去 1 得到两个单元格的 7003,那么 =A1=A2 最后 returns 在数学运算后为 TRUE。
所以现在我的 VBA 脚本必须隔离真正数字的文本供应商编号,并进行这个愚蠢的数学工作以确保重复的供应商编号真正相等,以便它们可以聚合。
有人以前看过这个吗?或者有一些时髦的技巧或设置,所以我不必在我的脚本中做愚蠢的 +1 / -1 数学?
正如我所说,我是 xlPastingValues:
'copy vendor ID (in column 6)
ActiveSheet.Columns(6).Copy
Sheets("Tempcopy").Columns(1).PasteSpecial xlPasteValues
谢谢,
约翰
编辑:我的 Excel 是 2010,但我不知道用于提供源数据的版本。
使用@BrakNicku 评论,我添加了一个强制正确数据类型的临时sheet,然后复制到工作sheet 进行处理。
我从外部来源获得了一个关于供应商信息的 excel 数据源文件。我将值复制并粘贴到我自己的 XLSM 和 运行 数据上的一些 VBA 脚本中。简而言之,该脚本聚合数据,删除重复行,在 A 列中留下一个唯一供应商编号列表,其中包含每个供应商的聚合数据。然后脚本将数据上传到其他部门的 SQL 数据库中。
昨天在上传时,我的数据库吐出一个错误,声称 INSERT 尝试使用重复值,但不允许重复。奇怪...我回到 excel 数据并按供应商编号排序,发现有大量重复行。什么?这以前从未发生过。
我突出显示了排序列 A 并将其复制到另一个 sheet,然后使用删除重复项工具。 Excel 报告说没有重复,当我真的盯着 10 个重复供应商编号的案例时。不幸的是,这是一个 TEXT 列,因为其他供应商编号中有字母,例如 AX6058
顶部的两个单元格 A1 和 A2 显示供应商编号 7003 和 7003。作为测试,当我说 =A1=A2 时测试 returns FALSE。
我确保两个单元格都是 TEXT... =A1=A2 仍然 returns FALSE
我将两个单元格都更改为 GENERAL... =A1=A2 仍然 returns FALSE
我 TRIM()' 了两个单元格的空格... =A1=A2 仍然 returns FALSE
我测试了两个单元格的 LEN()...它们都是 4
我强制两个单元格都是没有小数的 NUMBER,=A1=A2 仍然是 FALSE!!
如果我将 1 加到 7003 = 7004,然后减去 1 得到两个单元格的 7003,那么 =A1=A2 最后 returns 在数学运算后为 TRUE。
所以现在我的 VBA 脚本必须隔离真正数字的文本供应商编号,并进行这个愚蠢的数学工作以确保重复的供应商编号真正相等,以便它们可以聚合。
有人以前看过这个吗?或者有一些时髦的技巧或设置,所以我不必在我的脚本中做愚蠢的 +1 / -1 数学?
正如我所说,我是 xlPastingValues:
'copy vendor ID (in column 6)
ActiveSheet.Columns(6).Copy
Sheets("Tempcopy").Columns(1).PasteSpecial xlPasteValues
谢谢, 约翰
编辑:我的 Excel 是 2010,但我不知道用于提供源数据的版本。
使用@BrakNicku 评论,我添加了一个强制正确数据类型的临时sheet,然后复制到工作sheet 进行处理。