【问题标题】:VBA - Excel : Split string in a different columnVBA - Excel:在不同的列中拆分字符串
【发布时间】:2013-04-14 20:26:52
【问题描述】:

我希望我的 excel 文件的用户在单元格“B2”中输入一个句子,然后有一个 Sub 来解析不同列中的句子(从 D2 到 Dn)。因此,例如,如果您在 B2 中键入“aaa bbb ccc ddd”,结果应该是:
D2:aaa
D3 : bbb
D4:ccc
D5:ddd

我找到了如何使用拆分函数使用 VBA 拆分句子,但我很难填充列 D,因为我不知道如何定义最后一行 (Dn)。这是我目前使用的:

Sub splitAddress()
Dim strAddress As String

strAddress = Range("B2").Value
Range("D2:D9").Value = WorksheetFunction.Transpose(Split(strAddress, " "))

End Sub

我想修改“D2:D9”,因为 D9 并不总是该列的最后一行。如何写它应该根据我的 B2 单元格中的单词数从 D2 填充到 Dn? 提前致谢!

【问题讨论】:

标签: vba excel split


【解决方案1】:

像下面这样的循环会为你做这件事:

Sub splitAddress()

Dim i As Integer, x As Integer
Dim c As Range

i = 0
x = 1

Set c = Range("A5")

i = InStr(c.Value, " ")

c.Offset(0, x).Value = Left(c.Value, i - 1)
x = x + 1
i = InStr(i, c.Value, " ")

Do Until InStr(i + 1, c.Value, " ") = 0

    c.Offset(0, x).Value = Mid(c.Value, i + 1, InStr(i + 1, c.Value, " ") - i)
    i = InStr(i + 1, c.Value, " ")
    x = x + 1
Loop

End Sub

【讨论】:

  • 感谢您的回答,它比 Glenn Stevens 的回答更复杂,但无论如何这很有趣!
  • 不客气,我倾向于使用这样的循环,因为它可以进一步为你正在做的事情添加标准 - 检查额外的(双)空格等。可能过度杀伤你正在做,但可能会回答别人的问题。
  • 哦,是的,如果我最终必须为我的程序添加更多标准,我会记住这一点!
【解决方案2】:

可能有更优雅的方法可以做到这一点,但是如果您将地址拆分为一个数组,您可以使用Ubound 获取数组中的元素数,并使用.Resize 来增加您的范围内的行数:

Sub splitAddress()
  Dim strAddress As String
  Dim strAddressParts() As String
  Dim numParts As Integer

  strAddress = Range("B2").Value

  strAddressParts = Split(strAddress, " ")
  numParts = UBound(strAddressParts) + 1

  Range("D2").Resize(numParts).Value = WorksheetFunction.Transpose(strAddressParts)
End Sub

【讨论】:

  • 感谢@Glenn Stevens,清晰易用,非常适合我的工作!
猜你喜欢
  • 2012-01-04
  • 2013-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
相关资源
最近更新 更多