Macro to TRANSPOSE逗号将单元格分隔成行并复制相邻单元格

时间:2015-09-12 08:32:52

标签: excel comma transpose delimited

我有一个电子表格,其中输入了需要拆分的数据行。

目前这是一个手动过程,当我将我正在进行的步骤分成工作表时,我提供了一个指向工作簿的链接:

https://www.dropbox.com/s/0p3fg94pa61e4su/Example.xlsx?dl=0

手动完成时,逻辑过程首先按E(Temp)和F(Location)分割,因为它们直接相互关联,然后在下面插入一个空行,使它们分开,如工作表步骤1所示。

接下来的步骤是按B列分割样本,并在A:Y范围内从上方向下复制行以达到最终结果。

最好的解决方法是什么,因为我要使用键盘快捷键使其更快,但如果可以将其放入宏中,则每周可节省数小时!

问候。

1 个答案:

答案 0 :(得分:1)

我相信以下内容适合您。

Sub strata_data()
    Dim t As Long, s As Long, rw As Long
    Dim vTEMPs As Variant, vSAMPLEs As Variant, vOVENs As Variant

    Application.ScreenUpdating = False

    With Worksheets("Start2") '<~~set this worksheet name correctly
        For rw = .Cells(Rows.Count, 1).End(xlUp).Row To 6 Step -1
            vSAMPLEs = Split(.Cells(rw, 2).Value2, Chr(44))
            vTEMPs = Split(.Cells(rw, 5).Value2, Chr(44))
            vOVENs = Split(.Cells(rw, 6).Value2, Chr(44))
            For t = UBound(vTEMPs) To LBound(vTEMPs) Step -1
                .Cells(rw + 1, 1).Resize(2 + (t = LBound(vTEMPs)), 1).EntireRow.Insert
                .Cells(rw, 1).Resize(1, 7).Copy Destination:=.Cells(rw + 1 + (t = LBound(vTEMPs)), 1)
                .Cells(rw + 1 + (t = LBound(vTEMPs)), 5) = CLng(vTEMPs(t))
                .Cells(rw + 1 + (t = LBound(vTEMPs)), 6) = vOVENs(t)
                .Cells(rw + 1 + (t = LBound(vTEMPs)), 5).NumberFormat = "0° \C"
                .Cells(rw + 2 + (t = LBound(vTEMPs)), 1).Resize(1, 25).ClearContents
                .Cells(rw + 2 + (t = LBound(vTEMPs)), 1).Resize(1, 25).Interior.Pattern = xlNone
                If CBool(UBound(vSAMPLEs)) Then
                    .Cells(rw + 1 + (t = LBound(vTEMPs)), 1).Resize(1, 25).Copy
                    .Cells(rw + 1 + (t = LBound(vTEMPs)), 1).Resize(UBound(vSAMPLEs), 25).Insert Shift:=xlDown
                    For s = UBound(vSAMPLEs) To LBound(vSAMPLEs) Step -1
                        .Cells(rw + 1 + s + (t = LBound(vTEMPs)), 2) = vSAMPLEs(s)
                    Next s
                End If
            Next t
        Next rw
    End With

    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub

列G右侧的列中有一些。我不知道它们是否是种子数据,所以我一个人留下它们。如果不需要,您应该能够使用简单的.ClearContents命令清除它们。