3

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

我找到了如何使用 split 函数用 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?提前致谢 !

4

2 回答 2

4

可能有更优雅的方法可以做到这一点,但是如果将地址拆分为一个数组,则可以使用获取数组中的元素数,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
于 2013-04-22T02:58:24.053 回答
2

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

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
于 2013-04-22T02:59:37.637 回答