如何根据列内容复制excel中的行?

如何根据列内容复制excel中的行?,excel,excel-2010,vba,Excel,Excel 2010,Vba,我在excel表格中有以下数据 r1 r2 r3 r4 r5 v1 v2 r3 r4 r5 x1 x2 r4 r5 是否可能(以及如何)将此数据转换为以下结构: r1 r2 r3 r1 r2 r4 r1 r2 r5 v1 v2 r3 v1 v2 r4 v1 v2 r5 x1 x2 r4 x1 x2 r5 提前谢谢这就是你要尝试的吗 Sub Sample() Dim wsI As Worksheet, wsO As Worksheet Dim wsIlRow As Lon

我在excel表格中有以下数据

r1 r2 r3 r4 r5
v1 v2 r3 r4 r5
x1 x2    r4 r5
是否可能(以及如何)将此数据转换为以下结构:

r1 r2 r3
r1 r2 r4
r1 r2 r5
v1 v2 r3
v1 v2 r4
v1 v2 r5
x1 x2 r4
x1 x2 r5

提前谢谢

这就是你要尝试的吗

Sub Sample()
    Dim wsI As Worksheet, wsO As Worksheet
    Dim wsIlRow As Long, wsOlRow As Long, i As Long, j As Long

    Set wsI = Sheets("Sheet1")
    Set wsO = Sheets("Sheet2")

    wsIlRow = wsI.Range("A" & wsI.Rows.Count).End(xlUp).Row

    wsOlRow = 1

    For i = 1 To wsIlRow
        For j = 3 To 5
            If Len(Trim(wsI.Cells(i, j).Value)) <> 0 Then
                wsO.Range("A" & wsOlRow).Value = wsI.Range("A" & i).Value
                wsO.Range("B" & wsOlRow).Value = wsI.Range("B" & i).Value
                wsO.Range("C" & wsOlRow).Value = wsI.Cells(i, j).Value
                wsOlRow = wsOlRow + 1
            End If
        Next j
    Next i
End Sub
子样本()
将wsI设置为工作表,将wsO设置为工作表
模糊的wsIlRow一样长,wsOlRow一样长,i一样长,j一样长
设置wsI=图纸(“图纸1”)
设置wsO=图纸(“图纸2”)
wsIlRow=wsI.Range(“A”&wsI.Rows.Count).End(xlUp).Row
wsOlRow=1
对于i=1到wsIlRow
对于j=3到5
如果Len(Trim(wsI.Cells(i,j.Value))为0,则
wsO.Range(“A”&wsOlRow).Value=wsI.Range(“A”&i).Value
wsO.Range(“B”&wsOlRow).Value=wsI.Range(“B”&i).Value
wsO.Range(“C”和wsOlRow).Value=wsI.Cells(i,j).Value
wsOlRow=wsOlRow+1
如果结束
下一个j
接下来我
端接头
快照


此方法使用数组来避免范围循环。它转储从a:E列到F:H列的范围

Sub MoveEM()
    Dim rng1 As Range
    Dim X
    Dim Y
    Dim lngRow As Long
    Dim lngCol As Long
    Dim lngCnt As Long
    Set rng1 = Range([a1], Cells(Rows.Count, "E").End(xlUp))
    X = rng1.Value2

    ReDim Y(1 To 3 * UBound(X, 1), 1 To 3)
    For lngRow = 1 To UBound(X, 1)
        For lngCol = 1 To 3
            lngCnt = lngCnt + 1
            Y(lngCnt, 1) = X(lngRow, 1)
            Y(lngCnt, 2) = X(lngRow, 2)
            Y(lngCnt, 3) = X(lngRow, 2 + lngCol)
        Next
    Next
   [f1].Resize(UBound(Y, 1), UBound(Y, 2)) = Y

   End Sub


所以你的excel总是有5列,你想根据最后3列复制行吗?我相信这不是重复。。。您需要的是基于最后三列数据创建一行中的三行。为此,您需要编写MACRO@NirajNawanit确切地Fahim Pakar,我想我需要为此编写宏,但我对VBA知之甚少。你们有我可以从哪里开始的指南吗?