我在access数据库中有一个表,其中填写了数据。它是在25年内填写的,因此存在不一致之处。
但是有一列是可以的。我想用这个列修复另一列中的数据。样品如下:
Column1 | Column2
ICDS-1 | 01
ICDS-1A | 1A
ICDS-2 | 02
ICDS-3 | 3
ICDS-4A | 04
OTHER |
...
我想对access vba宏做的只是使用
Column1
中的数据并在连字符处拆分它。如果没有连字符,则应跳过该行:Column1 | Column2
ICDS | 1
ICDS | 1A
ICDS | 2
ICDS | 3
ICDS | 4A
OTHER |
...
虽然这似乎是一个相当简单的任务,我可以在任何时候在excel中做,我似乎无法开始与access vba,即使在谷歌了一段时间。
或者我完全错了,我应该使用一些sql查询吗?
如有任何帮助,我们将不胜感激。谢谢。
更新:使用opiesdad answer,以下VBA代码(现在使用实际的表和列名)将进行替换,但它不会跳过没有连字符的行(我在上面的问题中更新了这一点):
DoCmd.RunSQL
"UPDATE [MASTER TABLE]
SET [SERIES ABB] = Left([SERIES ABB], InStr([SERIES ABB], ""-"") - 1),
[# IN SERIES] = right([SERIES ABB], Len([SERIES ABB]) - InStr([SERIES ABB], ""-""))"
update2:已解决,请参阅opiesdad answer with final query和vba代码。
最佳答案
你不需要vba。
运行此SQL:
SELECT Iif(InStr([Column1],"-") = 0, [Column1], left([Column1], InStr([Column1], "-") - 1)) As NewCol1
, Iif(InStr([Column1],"-") = 0, "", right([Column1], Len([Column1]) - InStr([Column1], "-"))) As NewCol2
, [Column1]
, [Column2]
FROM myTable
instr函数查找要查找的值并返回字符串中找到该值的位置(第一个位置是位置1)。left和right函数分别从字符串的左侧和右侧返回选定的字符数。
这将显示结果(而不是覆盖表)。
要覆盖表,请执行以下操作:
UPDATE myTable
SET Column1 = left([Column1], InStr([Column1], "-") - 1)
, Column2 = right([Column1], Len([Column1]) - InStr([Column1], "-"))
WHERE (InStr([Column1], "-") > 0 )
执行更新查询的VBA代码(使用实际的表和列名):
DoCmd.RunSQL
"UPDATE [MASTER TABLE]
SET [SERIES ABB] = Left([SERIES ABB], InStr([SERIES ABB], ""-"") - 1),
[# IN SERIES] = right([SERIES ABB], Len([SERIES ABB]) - InStr([SERIES ABB], ""-""))
WHERE (InStr([SERIES ABB], ""-"") > 0 )"
关于sql - 在表中 Access VBA搜索和替换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38880570/