3

Excelファイルのユーザーがセル「B2」に文を入力してから、別の列(D2からDnまで)の文を解析するSubを持ってほしい。たとえば、B2 に「aaa bbb ccc ddd」と入力すると、結果として次のようになります。
D2 : aaa
D3 : bbb
D4 : ccc
D5 : ddd

VBAでsplit関数を使って文を分割する方法を見つけたのですが、最後の行(Dn)の定義が分からなくてD列に入力するのに苦労しました。これが私がこれまでに使用しているものです:

Sub splitAddress()
Dim strAddress As String

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

End Sub

D9が常に列の最後の行になるとは限らないため、「D2: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 に答える