Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有更优雅的公式/方法来编写宏行以在VBA/excel中重新格式化地址?_Excel_Vba_Excel Formula_Crm - Fatal编程技术网

是否有更优雅的公式/方法来编写宏行以在VBA/excel中重新格式化地址?

是否有更优雅的公式/方法来编写宏行以在VBA/excel中重新格式化地址?,excel,vba,excel-formula,crm,Excel,Vba,Excel Formula,Crm,我是VBA新手,所以请容忍我。我最近构建了一个宏,将csv(定期从在线捐赠平台下载)中的捐赠者和捐赠数据重新格式化为可导入我们主数据库的格式 因此,我处理的是非常烦人的“人”数据,如地址、电话号码、姓名等。由于csv下载中的数据是由捐赠者自己输入的,这使得这些数据变得更加烦人 我写了一个很长的公式(见下文),旨在修复地址的格式(尽我所能),但我想有一种更简洁的(*~优雅的~*)方法专门使用vba函数而不是excel来编写 到目前为止,我一直在使用公式的文本条目(下面的例子;我已经定义了Lastr

我是VBA新手,所以请容忍我。我最近构建了一个宏,将csv(定期从在线捐赠平台下载)中的捐赠者和捐赠数据重新格式化为可导入我们主数据库的格式

因此,我处理的是非常烦人的“人”数据,如地址、电话号码、姓名等。由于csv下载中的数据是由捐赠者自己输入的,这使得这些数据变得更加烦人

我写了一个很长的公式(见下文),旨在修复地址的格式(尽我所能),但我想有一种更简洁的(*~优雅的~*)方法专门使用vba函数而不是excel来编写

到目前为止,我一直在使用公式的文本条目(下面的例子;我已经定义了Lastrow,希望公式到此为止,这个方法似乎更容易一些),但是,我看到了反对这个方法的建议,所以我愿意为这个怪物改变它

Range("F2:F" & Lastrow).Formula = "=PROPER(TRIM(M2))"
由于以下原因,公式在长度上发生了分解:

  • 街道地址有两列需要合并到其中 一个用于导入格式。我使用了TEXTJOIN()。然而。。。
    • 如果第二列是公寓、套房等,则分隔符应为逗号和空格“,”
    • 如果第一列是建筑名称,第二列是街道地址,则分隔符应为回车字符(10)
  • 第二件事是大写(因为人们用古怪的方式输入自己的地址)。我使用了正确的()公式。然而,有一些奇怪的细微差别
    • 有NE、NW、SW和SE的街道以错误告终:NE、NW、SW、SE
    • 有第1、第2、第3、第4等的街道以错误告终:第1、第2、第3、第4等(我还没有包括这些地址的修复程序,因为公式已经非常庞大,这一步让我怀疑这是否是最好的方式——这就是我为什么要发布这篇文章的原因)

这看起来不像是在VBA宏中要执行的操作;相反,您希望使用实际的地理编码服务,该服务可以根据用户输入的文本标准化地址。使用起来比较直接。他们每月给你200美元的信用卡,这样你每月可以打40000个电话而不必付费。也有完全免费的替代品,尽管质量可能会有所不同。人们使用这些服务是有原因的;标准化很难。我想可能是这样的-非常感谢!我会调查的!这看起来不像是在VBA宏中要执行的操作;相反,您希望使用实际的地理编码服务,该服务可以根据用户输入的文本标准化地址。使用起来比较直接。他们每月给你200美元的信用卡,这样你每月可以打40000个电话而不必付费。也有完全免费的替代品,尽管质量可能会有所不同。人们使用这些服务是有原因的;标准化很难。我想可能是这样的-非常感谢!我会调查的!
IFS(
    AND(
        OR(
            LEFT(U2,1)=""#"",
            LEFT(U2,3)=""apt"",
            LEFT(U2,9)=""apartment"",
            LEFT(U2,4)=""bldg"",
            LEFT(U2,8)=""building"",
            LEFT(U2,2)=""fl"",
            ISNUMBER(FIND("" fl"",U2)),
            ISNUMBER(FIND("" floor"",U2)),
            LEFT(U2,5)=""floor"",
            LEFT(U2,3)=""ste"",
            LEFT(U2,5)=""suite"",
            LEFT(U2,4)=""unit"",
            LEFT(U2,2)=""rm"",
            LEFT(U2,4)=""room""
        ),
        OR(
            RIGHT(T2,3)="" NW"",
            RIGHT(T2,3)="" Nw"",
            RIGHT(T2,3)="" nw"",
            ISNUMBER(FIND("" NW "",T2)),
            ISNUMBER(FIND("" Nw "",T2)),
            ISNUMBER(FIND("" nw "",T2))
        )
    ),
    SUBSTITUTE(PROPER(TRIM(TEXTJOIN("", "",TRUE,T2,U2))),""Nw"",""NW""),
    AND(
        OR(
            LEFT(U2,1)=""#"",
            LEFT(U2,3)=""apt"",
            LEFT(U2,9)=""apartment"",
            LEFT(U2,4)=""bldg"",
            LEFT(U2,8)=""building"",
            LEFT(U2,2)=""fl"",
            ISNUMBER(FIND("" fl"",U2)),
            ISNUMBER(FIND("" floor"",U2)),
            LEFT(U2,5)=""floor"",
            LEFT(U2,3)=""ste"",
            LEFT(U2,5)=""suite"",
            LEFT(U2,4)=""unit"",
            LEFT(U2,2)=""rm"",
            LEFT(U2,4)=""room""
        ),
        OR(
            RIGHT(T2,3)="" NE"",
            RIGHT(T2,3)="" Ne"",
            RIGHT(T2,3)="" ne"",
            ISNUMBER(FIND("" NE "",T2)),
            ISNUMBER(FIND("" Ne "",T2)),
            ISNUMBER(FIND("" ne "",T2))
        )
    ),
    SUBSTITUTE(PROPER(TRIM(TEXTJOIN("", "",TRUE,T2,U2))),""Ne"",""NE""),    
    AND(
        OR(
            LEFT(U2,1)=""#"",
            LEFT(U2,3)=""apt"",
            LEFT(U2,9)=""apartment"",
            LEFT(U2,4)=""bldg"",
            LEFT(U2,8)=""building"",
            LEFT(U2,2)=""fl"",
            ISNUMBER(FIND("" fl"",U2)),
            ISNUMBER(FIND("" floor"",U2)),
            LEFT(U2,5)=""floor"",
            LEFT(U2,3)=""ste"",
            LEFT(U2,5)=""suite"",
            LEFT(U2,4)=""unit"",
            LEFT(U2,2)=""rm"",
            LEFT(U2,4)=""room""
        ),
        OR(
            RIGHT(T2,3)="" SW"",
            RIGHT(T2,3)="" Sw"",
            RIGHT(T2,3)="" sw"",
            ISNUMBER(FIND("" SW "",T2)),
            ISNUMBER(FIND("" Sw "",T2)),
            ISNUMBER(FIND("" sw "",T2))
        )
    ),
    SUBSTITUTE(PROPER(TRIM(TEXTJOIN("", "",TRUE,T2,U2))),""Sw"",""SW""),
    AND(
        OR(
            LEFT(U2,1)=""#"",
            LEFT(U2,3)=""apt"",
            LEFT(U2,9)=""apartment"",
            LEFT(U2,4)=""bldg"",
            LEFT(U2,8)=""building"",
            LEFT(U2,2)=""fl"",
            ISNUMBER(FIND("" fl"",U2)),
            ISNUMBER(FIND("" floor"",U2)),
            LEFT(U2,5)=""floor"",
            LEFT(U2,3)=""ste"",
            LEFT(U2,5)=""suite"",
            LEFT(U2,4)=""unit"",
            LEFT(U2,2)=""rm"",
            LEFT(U2,4)=""room""
        ),
        OR(
            RIGHT(T2,3)="" SE"",
            RIGHT(T2,3)="" Se"",
            RIGHT(T2,3)="" se"",
            ISNUMBER(FIND("" SE "",T2)),
            ISNUMBER(FIND("" Se "",T2)),
            ISNUMBER(FIND("" se "",T2))
        )
    ),
    SUBSTITUTE(PROPER(TRIM(TEXTJOIN("", "",TRUE,T2,U2))),""Se"",""SE""),
    OR(
        LEFT(U2,1)=""#"",
        LEFT(U2,3)=""apt"",
        LEFT(U2,9)=""apartment"",
        LEFT(U2,4)=""bldg"",
        LEFT(U2,8)=""building"",
        LEFT(U2,2)=""fl"",
        ISNUMBER(FIND("" fl"",U2)),
        ISNUMBER(FIND("" floor"",U2)),
        LEFT(U2,5)=""floor"",
        LEFT(U2,3)=""ste"",
        LEFT(U2,5)=""suite"",
        LEFT(U2,4)=""unit"",
        LEFT(U2,2)=""rm"",
        LEFT(U2,4)=""room""
    ),
    PROPER(TRIM(TEXTJOIN("", "",TRUE,T2,U2))),
    OR(
            RIGHT(T2,3)="" NW"",
            RIGHT(T2,3)="" Nw"",
            RIGHT(T2,3)="" nw"",
            ISNUMBER(FIND("" NW "",T2)),
            ISNUMBER(FIND("" Nw "",T2)),
            ISNUMBER(FIND("" nw "",T2))
        ),
    SUBSTITUTE(PROPER(TRIM(TEXTJOIN(CHAR(10),TRUE,T2,U2))),""Nw"",""NW""),
    OR(
            RIGHT(T2,3)="" NE"",
            RIGHT(T2,3)="" Ne"",
            RIGHT(T2,3)="" ne"",
            ISNUMBER(FIND("" NE "",T2)),
            ISNUMBER(FIND("" Ne "",T2)),
            ISNUMBER(FIND("" ne "",T2))
        ),
    SUBSTITUTE(PROPER(TRIM(TEXTJOIN(CHAR(10),TRUE,T2,U2))),""Ne"",""NE""),
    OR(
            RIGHT(T2,3)="" SW"",
            RIGHT(T2,3)="" Sw"",
            RIGHT(T2,3)="" sw"",
            ISNUMBER(FIND("" SW "",T2)),
            ISNUMBER(FIND("" Sw "",T2)),
            ISNUMBER(FIND("" sw "",T2))
        ),
    SUBSTITUTE(PROPER(TRIM(TEXTJOIN(CHAR(10),TRUE,T2,U2))),""Sw"",""SW""),
    OR(
            RIGHT(T2,3)="" SE"",
            RIGHT(T2,3)="" Se"",
            RIGHT(T2,3)="" se"",
            ISNUMBER(FIND("" SE "",T2)),
            ISNUMBER(FIND("" Se "",T2)),
            ISNUMBER(FIND("" se "",T2))
        ),
    SUBSTITUTE(PROPER(TRIM(TEXTJOIN(CHAR(10),TRUE,T2,U2))),""Se"",""SE""),
    TRUE,
    PROPER(TRIM(TEXTJOIN(CHAR(10),TRUE,T2,U2)))
)