1

それはどのように機能しますか?ウィザードは使いたくありません。VBA を使用して実行したいと考えています。

私は名前の列を持っています.first、middle、last、いくつかは接尾辞(Jr、Sr)が付いています. 一部の名前には複数のミドルネーム(フルネームまたはイニシャル)があります. 一部の名前には2つの部分があります(Van der lay、de Novo)

txt-to-column を実行するときに必要なのはスペースだけですが、結果の列の数が 5 から 8 になる可能性があるため、各名前に関連付けられている次の列のデータを削除するリスクがあります。

最初に列を追加するようにサブを設定しましたが、もっとエレガントで効率的なものがあるかもしれないと思いました。

4

1 に答える 1

2

VBA では、セパレータの数 (または列の数) を数え、適切な数の列を挿入してから、ウィザードを実行するのが最も簡単な解決策です。

スペースを数えている場合、次のコードはスペースの最大数を取得します。

Dim shtTemp As Worksheet, lMaxSpaces As Long

Set shtTemp = Sheets.Add
shtTemp.Cells(1, 1).FormulaArray = _
    "=MAX(LEN('Sheet1!R[1]C[1]:R[1000]C[1])-LEN(SUBSTITUTE('Sheet1!R[1]C[1]:R[1000]C[1],"" "","""")))"
lMaxSpaces = shtTemp.Cells(1, 1).Value

Application.DisplayAlerts = False
shtTemp.Delete
Application.DisplayAlerts = True

シートを挿入しない別のオプションは次のとおりです。

Dim vArr As Variant, lMaxSpaces As Long, lLoop As Long, lSpaces As Long

 vArr = Selection.Value

For lLoop = LBound(vArr, 1) To UBound(vArr, 1)
    lSpaces = Len(vArr(lLoop, 1)) - Len(Replace(vArr(lLoop, 1), " ", ""))
    If lSpaces > lMaxSpaces Then lMaxSpaces = lSpaces
Next

Debug.Print lMaxSpaces
于 2012-09-25T16:22:53.937 に答える