1

那将如何运作?我不想使用向导,我想使用 VBA 来完成。

我有一列名字,名字,名字,中间名,姓氏,一些有后缀(Jr,Sr)一些名字有多个中间名(全名或首字母)一些确定的名字有2个部分(Van derlay,de Novo)。

在执行 txt-to-column 时,我需要的只是空间,但由于结果列的数量可以从 5 到 8 不等,我冒着删除与每个名称相关联的下一列中的数据的风​​险。

我已经将我的 Sub 设置为首先添加列,但我认为可能会有更优雅和/或更高效的东西。

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 回答