我在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/

10-12 16:38
查看更多