是否可以插入文本到列而不是替换数据?

时间:2012-09-25 16:10:18

标签: excel vba excel-vba

那怎么办? 我不想使用向导,我想使用VBA。

我有一列名字,第一,中间,最后,一些带后缀(Jr,Sr) 一些名称有多个中间名(全名或缩写) 一些肯定的名字有2个部分(Van der lay,de Novo)。

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

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

1 个答案:

答案 0 :(得分:1)

在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