在一行下添加其他行,具体取决于范围中已用单元格的数量

时间:2017-11-27 14:12:35

标签: excel vba

Problem

基本上我需要拆分一个具有一些值的单元格,用逗号分隔成更多的单元格。然后我需要在新单元格下创建精确数量的单元格,以便稍后转换此范围以获得新表格。

在图片中,您可以看到我拥有的和我需要的一个例子。我需要对数据进行匿名处理。此外,我有数百行需要更改,如示例中的2。

这是我目前的代码:

Sub texttocolumns()

Dim rng As Range
Dim x As Integer

x = ActiveSheet.UsedRange.Rows.Count

For i = x - 2 To 1

Cells(2 + i, 8).texttocolumns _
Destination:=Cells(2 + i, 9), _
Comma:=True

    k = Application.WorksheetFunction.CountA("A" & "2 + i"" & "":" & "AT1")

            Cells(2 + i, 1).Rows(k).Insert
Next i

End Sub

此刻我无法找到错误,有人可以帮帮我吗?谢谢!

1 个答案:

答案 0 :(得分:1)

由于输出结果被发布到不同的位置,因此可以避免插入行的昂贵任务。

尝试这个过程,这也避免了通过生成两个数组来处理源范围:

  1. 包含固定字段的数组
  2. 包含需要拆分的字段的数组
  3. 程序:

        Sub Range_Split_A_Field()
        Dim wsTrg As Worksheet, rgOutput As Range
        Dim aFld_1To5  As Variant, aFld_6 As Variant
        Dim aFld As Variant
        Dim lRow As Long, L As Long
    
            lRow = 3
            Set wsTrg = ThisWorkbook.Sheets("Sht(2)")
            Application.Goto wsTrg.Cells(1), 1
    
            With wsTrg.Cells(lRow, 1).CurrentRegion
                Set rgOutput = .Rows(1).Offset(0, 10)
                .Rows(1).Copy
                rgOutput.PasteSpecial
                Application.CutCopyMode = False
                aFld_1To5 = .Offset(1, 0).Resize(-1 + .Rows.Count, 5).Value2
                aFld_6 = .Offset(1, 5).Resize(-1 + .Rows.Count, 1).Value2
            End With
    
            lRow = 1
            For L = 1 To UBound(aFld_1To5)
                aFld = aFld_6(L, 1)
                If aFld = vbNullString Then
                    rgOutput.Offset(lRow).Resize(1, 5).Value = WorksheetFunction.Index(aFld_1To5, L, 0)
                    rgOutput.Offset(lRow, 5).Resize(1, 1).Value = aFld
                    lRow = 1 + lRow
    
                Else
                    aFld = Split(aFld, Chr(44))
                    aFld = WorksheetFunction.Transpose(aFld)
                    rgOutput.Offset(lRow).Resize(UBound(aFld), 5).Value = WorksheetFunction.Index(aFld_1To5, L, 0)
                    rgOutput.Offset(lRow, 5).Resize(UBound(aFld), 1).Value = aFld
                    lRow = lRow + UBound(aFld)
    
            End If: Next
    
            End Sub
    

    请参阅以下页面以更好地了解所使用的资源:
    Application.Goto Method (Excel)
    With Statement
    Range Object (Excel)
    Chr Function
    UBound Function
    WorksheetFunction Object (Excel)