【问题标题】:Access VBA Search and Repace in Table在表格中访问 VBA 搜索和替换
【发布时间】:2016-12-17 06:15:15
【问题描述】:

我在 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 回答以下 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], ""-""))"

更新 2: 已解决,请参阅 OpiesDad 答案以及最终查询和 VBA 代码。

【问题讨论】:

    标签: sql database vba ms-access sql-update


    【解决方案1】:

    您不需要 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 )"
    

    【讨论】:

    • 好的,所以我设法用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], ""-""))"应用你的代码
    • 现在的问题是大约有 250 行 Column1 没有连字符。在这些中,整个Column1 字段被移到Column2。但相反,我需要将这些行保持原样。
    • 查看第一部分的更新。使用“IIf”函数。
    • 太棒了!谢谢您的帮助。 WHERE 声明解决了它。查看您帖子的更新。
    猜你喜欢
    • 1970-01-01
    • 2013-08-25
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多