【发布时间】:2023-03-27 04:40:01
【问题描述】:
我想在 Excel 中的地址和邮政编码之间拆分字符串。我想单独保留邮政编码。
通过选择选项 - 数据 - 文本到列 - 分隔 - 逗号分隔 - 整个字符串被分成 4 部分,因为出现 3 个逗号。
1 - 21 Willow Court, 1192 Christchurch Road, Bournemouth, BH7 6EG
我发现,它可以在 VBA Excel 中完成。
有以下几种方法:
Excel VBA- remove part of the string
https://www.thespreadsheetguru.com/the-code-vault/2014/2/28/remove-last-character-from-string
How to delete last character in a string with VBA?
How to i remove a text after '*' or '-' character using VBA in excel?
我准备了如下的 VBA 代码:
Sub Textremove()
Dim c As Variant
For Each c In Range("D1:D100")
c.Value = Left(c.Value, InStr(c.Value, ",") - 1)
Next c
End Sub
我只收到:
1 - 21 柳苑
和错误无效的过程调用或参数,调试以下行:
c.Value = Left(c.Value, InStr(c.Value, ",") - 1)
所以分解发生在第一个逗号而不是最后一个逗号之后。
我找到了有关此错误的答案:
invalid procedure call or argument left
当我的代码看起来像这样时:
Sub Textremove()
Dim c As Variant
For Each c In Range("D1:D100")
If InStr(c.Value, ",") > 0 Then
c.Value = Left(c.Value, InStr(c.Value, ",") - 1)
End If
Next c
End Sub
然后错误不再发生,但我仍然得到这些东西,直到第一个逗号而不是最后一个逗号。
当我稍微改变一下代码时:
Sub Textremove()
Dim c As Variant
For Each c In Range("D1:D100")
If InStr(c.Value, ",") > 0 Then
c.Value = Right(c.Value, InStr(c.Value, ","))
End If
Next c
End Sub
我从右边得到 2 个句子
伯恩茅斯,BH7 6EG
不是固定的,会根据字符串的总长度而变化。
我怎样才能接收到最后一个逗号而不是第一个逗号的字符串? 如何分别拆分地址和邮政编码之间的整个字符串?
这里有一个很好的例子:
https://trumpexcel.com/vba-split-function/
Sub CommaSeparator()
Dim TextStrng As String
Dim Result() As String
Dim DisplayText As String
Dim i As Long
TextStrng = Sheets("Final").Range("D1")
Result = Split(TextStrng, ",", 1)
For i = LBound(Result()) To UBound(Result())
DisplayText = DisplayText & Result(i) & vbNewLine
Next i
MsgBox DisplayText
End Sub
诚然,它拆分了整个地址,但仍从第一个逗号开始计算。
【问题讨论】:
-
您不需要 VBA。你有什么版本的Excel?顺便说一句,对彻底的问题表示敬意!很好的研究。
-
嗨,我知道,我不需要 VBA,因为它有很多可用的 excel 公式提示。但是我正在自动化一些东西,所以我担心这次我需要 VBA。
标签: excel vba street-address