首页 文章

VBA代码 - 根据特定条件复制和转置粘贴

提问于
浏览
0

我编写了一个代码,用于从Sheet3复制数据(连续)并将粘贴转置到Sheet2中的COLUMN c但是,我需要根据Sheet2列A1到A4000中的ID与列D1匹配的条件来中断复制和粘贴的行到D4000 .

循环通过Sheet3中的行并通过向右填充它来粘贴它,即转置 .

例如:

SHEET 3:
1 202  Anna
2 202  Mary
3 202  Gary
4 204 France
5 204  Greece
6 301 London
7 301 Alice
8 301 Mandy
9 406 HongKong
10 406 Osaka

应该粘贴到表2中:

A    B      C       D
1 202 Anna    Mary    Gary
2 204 France  Greece
3 301 London  Alice   Mandy

这是我目前的代码:

Dim Sourcerange  As Range
Dim Targetrange As Range


Set Sourcerange = Sheet3.Range("N3:N4105")
Set Targetrange = Sheet2.Range("C1:C4105")

Sourcerange.Copy
Targetrange.PasteSpecial Paste:=xlPasteValues, _
            Operation:=xlNone, SkipBlanks:=False, _
            Transpose:=True

End Sub

我想循环遍历行,而不必从代码中更改源范围或目标范围 .

1 回答

  • 0

    这是解决方案之一

    Sub test()
    Dim Dic As Object: Set Dic = CreateObject("Scripting.Dictionary")
    Dim CLa As Range, CLb As Range, x&, Names$, ID$, Key
    
    x = Sheets("Sheet3").Cells(Rows.Count, "A").End(xlUp).Row
    For Each CLa In Sheets("Sheet3").Range("A1:A" & x)
        If Not Dic.exists(CStr(CLa.Value)) Then
            ID = CLa.Value
    
            For Each CLb In Sheets("Sheet3").Range("A1:A" & x)
                If CLb.Value = ID Then
    
                    If Names = "" Then
                        Names = CLb.Offset(, 1).Value
                    Else
                        Names = Names & "," & CLb.Offset(, 1).Value
                    End If
    
                End If
            Next CLb
    
        Dic.Add ID, Names
        End If
        ID = Empty: Names = Empty
    Next CLa
    
    x = 1
    For Each Key In Dic
        Sheets("Sheet2").Cells(x, 1).Value = Key
        Sheets("Sheet2").Range(Cells(x, 2), Cells(x, 4)) = Split(Dic(Key), ",")
        x = x + 1
    Next Key
    
    Sheets("Sheet2").Cells.Replace "#N/A", Replacement:=""
    
    End Sub
    

    来源表3

    enter image description here

    输出表2

    enter image description here

相关问题