我是VBA的新手,请多多包涵。我最近建立了一个宏,用于将来自csv(定期从在线捐赠平台下载)的捐赠者和捐赠数据重新格式化为可导入到我们的主数据库中的格式。
因此,我正在处理真正令人讨厌的“人”数据,例如地址,电话号码,姓名等,这是由于csv下载中的数据是由捐助者自己输入的事实而变得更加令人讨厌。
我写了一个very long公式(如下所示),该公式旨在修复addresses的格式(以我的最大能力),但是我在想更简洁(*〜elegant〜*)的方式专门使用vba函数而不是excel编写它。
到目前为止,我一直在使用公式的文本输入(下面的示例;我定义了[[Lastrow,并且希望公式在此停止,此方法似乎更容易一些)),但是,我我们已经看到了反对这种方法的建议,所以我愿意为这个怪物更改它。
Range("F2:F" & Lastrow).Formula = "=PROPER(TRIM(M2))"
由于以下原因该公式的长度爆炸:
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)))
)
Google不遵守任何特定的地址标准(例如USPS)。他们的地址是碰巧的任何格式。标准与它无关。