Excel:复制其余字段时,需要将一个字段转换为多个值

Excel:复制其余字段时,需要将一个字段转换为多个值,excel,vba,Excel,Vba,我有一个电子表格,其中E列需要拆分值(当前为逗号分隔的值)并转换为多行。C、D、F-S列需要向下复制。例子: 纵队 我需要它看起来像: +-----+-------+--------+-------+--------+--------+---------+ | C | D | E | F | G | H | ... S | +-----+-------+--------+-------+--------+--------+---------+

我有一个电子表格,其中E列需要拆分值(当前为逗号分隔的值)并转换为多行。C、D、F-S列需要向下复制。例子: 纵队

我需要它看起来像:

+-----+-------+--------+-------+--------+--------+---------+
| C   |   D   |   E    |   F   |    G   |    H   |  ... S  |
+-----+-------+--------+-------+--------+--------+---------+
| 20  |  hey  |  one   |  xyz  |  unit  |  right | ... end |
| 20  |  hey  |  two   |  xyz  |  unit  |  right | ... end |
| 20  |  hey  |  three |  xyz  |  unit  |  right | ... end |
+-----+-------+--------+-------+--------+--------+---------+

任何帮助都会很好

此代码应该可以帮助您……

Sub GetOutput()

    Dim rndData                 As Range
    Dim rngOutCell              As Range
    Dim MainIindex              As Integer '<< Column index Needs to be split
    Dim AllData                 As Variant  '<< Data Range
    Dim InnerData               As Variant '<< Split Data
    Dim intRecordCounter        As Integer

    MainIindex = 3
    lngDataRow = 0

    Set rndData = Sheet1.Range("E1").CurrentRegion
    Set rngOutCell = Sheet1.Range("O1")

    For intRecordCounter = 1 To rndData.Rows.Count

        AllData = rndData.Rows(intRecordCounter).Value
        InnerData = Split(rndData.Rows(intRecordCounter).Cells(MainIindex).Value, ",")

        Set rngOutCell = Sheet1.Cells(Rows.Count, rngOutCell.Column).End(xlUp)
        If rngOutCell <> vbNullString Then
            Set rngOutCell = rngOutCell.Offset(1)
        End If

        Set rngOutCell = rngOutCell.Resize(UBound(InnerData) + 1, UBound(AllData, 2))
        rngOutCell.Value = AllData
        rngOutCell.Offset(, MainIindex - 1).Resize(, 1).Value = Application.Transpose(InnerData)

    Next intRecordCounter

ClearMemory:
    MainIindex = Empty
    If IsArray(AllData) Then Erase AllData
    If IsArray(InnerData) Then Erase InnerData
    intRecordCounter = Empty
    Set rndData = Nothing
    Set rngOutCell = Nothing

End Sub
Sub-GetOutput()
作为范围的Dim rndData
Dim RNGUTCELL As范围

Dim MainIndex As Integer'谢谢,我尝试了这段代码,收到了一个错误:运行时错误13:类型不匹配;我检查了debug,突出显示的行被设置为rngOutCell=rngOutCell.Resize(UBound(InnerData)+1,UBound(AllData,2))是否更改了“rndData”=“C1”(无论数据从何处开始,我都更改了代码以设置rndData=Sheet1.Range(“C1”).CurrentRegionI我仍然在同一行上收到运行时13错误。此代码在这里工作得很好…请发送您的邮件
Sub GetOutput()

    Dim rndData                 As Range
    Dim rngOutCell              As Range
    Dim MainIindex              As Integer '<< Column index Needs to be split
    Dim AllData                 As Variant  '<< Data Range
    Dim InnerData               As Variant '<< Split Data
    Dim intRecordCounter        As Integer

    MainIindex = 3
    lngDataRow = 0

    Set rndData = Sheet1.Range("E1").CurrentRegion
    Set rngOutCell = Sheet1.Range("O1")

    For intRecordCounter = 1 To rndData.Rows.Count

        AllData = rndData.Rows(intRecordCounter).Value
        InnerData = Split(rndData.Rows(intRecordCounter).Cells(MainIindex).Value, ",")

        Set rngOutCell = Sheet1.Cells(Rows.Count, rngOutCell.Column).End(xlUp)
        If rngOutCell <> vbNullString Then
            Set rngOutCell = rngOutCell.Offset(1)
        End If

        Set rngOutCell = rngOutCell.Resize(UBound(InnerData) + 1, UBound(AllData, 2))
        rngOutCell.Value = AllData
        rngOutCell.Offset(, MainIindex - 1).Resize(, 1).Value = Application.Transpose(InnerData)

    Next intRecordCounter

ClearMemory:
    MainIindex = Empty
    If IsArray(AllData) Then Erase AllData
    If IsArray(InnerData) Then Erase InnerData
    intRecordCounter = Empty
    Set rndData = Nothing
    Set rngOutCell = Nothing

End Sub