Excel 在两列中使用分号拆分文本,并使用复制的相应数据进行一对一映射

Excel 在两列中使用分号拆分文本,并使用复制的相应数据进行一对一映射,excel,excel-2010,vba,Excel,Excel 2010,Vba,我需要帮助调整下面的代码。屏幕截图列在标有“屏幕截图”的代码下面。这是我试图分离的类似数据的样本格式。我有3000多行这种格式的数据。下面的代码能够拆分一列并复制数据,但现在我必须对位置和日期进行一对一映射,并复制所有相应的数据。任何意见都将不胜感激 我希望数据不仅在分号处拆分为单独的行,而且还将日期映射到每个相应的位置,并复制旁边的数据 这是我在一个特定专栏中使用的代码。提前谢谢!源代码来自一个post-on堆栈溢出:一个非常有用的代码 Sub-SplitPartsRows() 变暗rng A

我需要帮助调整下面的代码。屏幕截图列在标有“屏幕截图”的代码下面。这是我试图分离的类似数据的样本格式。我有3000多行这种格式的数据。下面的代码能够拆分一列并复制数据,但现在我必须对位置和日期进行一对一映射,并复制所有相应的数据。任何意见都将不胜感激

我希望数据不仅在分号处拆分为单独的行,而且还将日期映射到每个相应的位置,并复制旁边的数据

这是我在一个特定专栏中使用的代码。提前谢谢!源代码来自一个post-on堆栈溢出:一个非常有用的代码

Sub-SplitPartsRows()
变暗rng As范围
变暗,变长
将部分()作为字符串
Dim partNum尽可能长
像细绳一样模糊的痕迹
“##在我的示例中,我使用A:E列,D列包含相应的部分##
设置rng=范围(“A1:BI13876”)##根据需要修改##”
r=2
在r时执行以下操作:

Sub Reformat()
    Dim rwIn As Range, rwOut As Range
    Dim arrLoc, arrDt, locs, dts, i

    Set rwIn = ActiveSheet.Range("A2:E2")
    Set rwOut = ActiveSheet.Range("G2:K2")

    Do While Application.CountA(rwIn) > 0
        locs = rwIn.Cells(2).Value
        dts = rwIn.Cells(4).Value

        If Len(locs) > 0 And Len(dts) > 0 Then
            arrLoc = Split(locs, ";")
            arrDt = Split(dts, ";")
            For i = LBound(arrLoc) To UBound(arrLoc)
                With rwOut
                    .Cells(1) = rwIn.Cells(1)
                    .Cells(2) = arrLoc(i)
                    .Cells(3) = rwIn.Cells(3)
                    If i <= UBound(arrDt) Then
                        .Cells(4) = arrDt(i)
                    End If
                    .Cells(5) = rwIn.Cells(5)
                End With
                Set rwOut = rwOut.Offset(1, 0)
            Next i
        End If
        Set rwIn = rwIn.Offset(1, 0)
    Loop
End Sub
Sub-Reformat()
变暗rwIn As范围,rwOut As范围
Dim arrLoc,arrDt,locs,dts,i
设置rwIn=ActiveSheet.Range(“A2:E2”)
设置rwOut=ActiveSheet.Range(“G2:K2”)
应用时执行。计数a(rwIn)>0
locs=rwIn.单元(2).值
dts=rwIn.Cells(4).值
如果Len(locs)>0且Len(dts)>0,则
arrLoc=拆分(locs,“;”)
arrDt=拆分(dts,“;”)
对于i=LBound(arrLoc)至UBound(arrLoc)
带rwOut
.Cells(1)=rwIn.Cells(1)
.单元格(2)=arrLoc(i)
.Cells(3)=rwIn.Cells(3)

如果我看到你的输入和预期输出的截图,我会在这里有所帮助。我在帖子中添加了截图。提前谢谢!承认。第一次使用堆栈溢出来发布问题。我不知道。它现在被承认了!两点:1)仅以屏幕截图的形式发布样本数据是没有用的——你希望人们把它打印出来吗?2) 你做了什么来解决这个问题?简单地把你的要求放在某人身上,让别人来做你的工作,这是不可能的。我说:在任何指导中的任何输入都将被感激。我不希望整个代码都能被解决。非常感谢Tim!它就像一个符咒。我真的需要理解逻辑。我从来没有写过宏,也没有编写过代码,这个项目就落在了我的膝上。感谢您以一种我能够真正理解代码中发生了什么的方式来编写它!我真的很感激!非常感谢。
Sub Reformat()
    Dim rwIn As Range, rwOut As Range
    Dim arrLoc, arrDt, locs, dts, i

    Set rwIn = ActiveSheet.Range("A2:E2")
    Set rwOut = ActiveSheet.Range("G2:K2")

    Do While Application.CountA(rwIn) > 0
        locs = rwIn.Cells(2).Value
        dts = rwIn.Cells(4).Value

        If Len(locs) > 0 And Len(dts) > 0 Then
            arrLoc = Split(locs, ";")
            arrDt = Split(dts, ";")
            For i = LBound(arrLoc) To UBound(arrLoc)
                With rwOut
                    .Cells(1) = rwIn.Cells(1)
                    .Cells(2) = arrLoc(i)
                    .Cells(3) = rwIn.Cells(3)
                    If i <= UBound(arrDt) Then
                        .Cells(4) = arrDt(i)
                    End If
                    .Cells(5) = rwIn.Cells(5)
                End With
                Set rwOut = rwOut.Offset(1, 0)
            Next i
        End If
        Set rwIn = rwIn.Offset(1, 0)
    Loop
End Sub