【问题标题】:Split Data where no obvious consistent delimiter: Excel - VBA没有明显一致分隔符的拆分数据:Excel - VBA
【发布时间】:2017-12-04 08:19:20
【问题描述】:

我正在尝试将我的 Excel 数据拆分为不同的列。我获得的数据在分隔符方面是不一致的,但数据的某些属性有助于将它们分成列。问题是,我对 Excel 和 VBA 的了解有限。下面是我要拆分为几列的列中的示例。

从上图可以看出,仅使用一个简单的脚本(通过单个分隔符分割数据)是行不通的,因为地址可以位于建筑物、单元或单个属性中。但是,我确实注意到 Suburbs、States 和 Country 都是大写的。这意味着我可以使用一些东西。

到目前为止,我所做的所有代码都是使用逗号分隔符将活动单元格拆分为多个单元格。

Sub SplitColoumn()

    Dim rng As range
    s = Split(ActiveCell, ",")

    Set rng = ActiveCell
    rng.Select

    Set rng = rng.Resize(1, 1 + UBound(s) + 1)
    rng.Select

    rng = s

End Sub

结果符合预期,因为所有这些代码都会拆分活动单元格,但我似乎无法弄清楚如何使用循环并更好地控制约束。

我想将地址拆分为街道、郊区、州和邮政编码的单独列。

谢谢

编辑:我现在添加了图像,我不确定为什么它没有第一次出现。

【问题讨论】:

  • As you can see form the picture above[...] 是我自己还是真的没图看你的意思?无论如何,最好将一些示例数据粘贴到您的帖子中(作为文本)而不是图片:meta.stackoverflow.com/questions/285551/…
  • 我也没有图片。
  • 我只看到括号框。我检查了编辑,那里也有错误。
  • 您需要 IF、Mid 和 Ucase,Google 了解如何使用

标签: excel vba


【解决方案1】:

我想将地址拆分为街道的单独列, 郊区、州和邮政编码

我假设您的意思是街道、城市、县、国家和邮政编码的单独列?

设置对 Microsoft VBScript RegularExpression 5.5 的引用。 调整以下代码(范围):

Dim rex As RegExp
Dim m As Match, mc As MatchCollection
Dim ran As Range, cel As Range

Set rex = New RegExp
rex.Pattern = "([\w\d\s\,]+?)\,([A-Z\s]+?)\,([A-Z\s]+?)\,([A-Z\s]+?)\,([\d\s]+?)$"

Set ran = Range("A1:A3")

For Each cel In ran
    Set mc = rex.Execute(CStr(cel.Value))
    Set m = mc.Item(0)
    cel = m.SubMatches(0)
    cel.Offset(0, 1) = m.SubMatches(1)
    cel.Offset(0, 2) = m.SubMatches(2)
    cel.Offset(0, 3) = m.SubMatches(3)
    cel.Offset(0, 4) = m.SubMatches(4)
Next cel

这会将每个单元格的内容分成几列。

【讨论】:

  • 难以置信,我有一些代码可以做到这一点,它大约长了 5 倍,而且还涉及到我使用第二个脚本。我离正确还差得很远。你做的真好,谢谢。
  • 另外不要忘记启用正则表达式。这可以在工具 -> 参考下完成
猜你喜欢
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 2021-05-30
相关资源
最近更新 更多