วิธีรวมค่าจากหลายแถวเข้าในแถวเดียวโดยใช้โมดูลได้อย่างไร


0

ฉันต้องการรวมหลายแถวเข้าด้วยกันเป็นแถวตามค่าในคอลัมน์รหัส .. ฉันสังเกตเห็นคำถามอื่น ๆ ที่คล้ายกับคำถามของฉันที่นี่ แต่ดูเหมือนว่าฉันไม่สามารถขยายขอบเขตได้ ..

Code    Name    Value A Value B Value C Value D Value E
101   Example      #                
101   Example                       
101   Example                     #     
101   Example                            #  
101   Example                                    #
102   Example2                                   #
102   Example2                           #  
102   Example2                    #     
102   Example2            #         
102   Example2     #

ดังนั้นผลลัพธ์สุดท้ายจะเป็นดังนี้:

Code    Name    Value A Value B Value C Value D Value E
101    Example     #               #       #       #
102    Example2    #       #       #       #       #

แก้ไข

นี่คือสิ่งที่ฉันได้มาจนถึงตอนนี้ฉันวางแผนที่จะย้ายรายการไปยังแถวด้านบนก่อนที่จะลบทั้งแถวเนื่องจากแถวหนึ่งอาจมีหลายรายการ

Dim RowNum, LastRow, Col As Long

RowNum = 2
Col = 3

LastRow = Cells.SpecialCells(xlCellTypeLastCell).row
Range("A2", Cells(LastRow, 7)).Select

For Each row In Selection
    With Cells
        If Cells(RowNum, 1) = Cells(RowNum + 1, 1) Then
            For Each Cell In row
                If Cell > 0 Then
                Cells(RowNum + 1, Col).Copy Destination:=Cells(RowNum, Col)
                Else
                Col = Col + 1
            End If
        Rows(RowNum + 1).EntireRow.Delete
        End If
  End With

RowNum = RowNum + 1

Next row

1
การแก้ปัญหานี้จะทำงาน เริ่มจากสิ่งนั้นและดูว่าคุณไปไหนผิดจากนั้นโพสต์สิ่งที่คุณมีและเราสามารถช่วยคุณได้ว่าคุณติดอยู่ที่ไหน
Raystafarian

วิธีแก้ปัญหาทำงานได้ แต่มีปัญหาหนึ่งฉันไม่สามารถเพิ่มค่า ColumnIndex กับแต่ละลูป: สำหรับแต่ละแถวในการเลือกกับเซลล์ถ้าเซลล์ (RowNum, 1) = เซลล์ (RowNum + 1, 1) จากนั้นเซลล์ (RowNum + 1, Col). คัดลอกปลายทาง: = Cells (RowNum, Col) 'Rows (RowNum + 1) .EntireRow.Delete Col = Col + 1 สิ้นสุดถ้าลงท้ายด้วย
damm

1
ทำงานกับเซลล์ (RowNum, 1) - "1" คือหมายเลขคอลัมน์ (A = 1, B = 2) และเพียงคัดลอกสิ่งที่เกิดขึ้น อย่างที่ฉันบอกให้เขียนขึ้นและโพสต์รหัสของคุณในคำถามของคุณและเรายินดีที่จะแก้ไขปัญหา
Raystafarian

เนื่องจากอาจมีหลายรายการต่อแถวจะมีหลายรายการสำหรับแถวที่ตรงกันในคอลัมน์เดียวกันหรือไม่
Raystafarian

ขออภัยในการตอบกลับล่าช้าใช่อาจมีหลายรายการสำหรับการจับคู่แถวในคอลัมน์เดียวกัน
damm

คำตอบ:


1

ฉันรู้สึกละอายใจกับคำตอบที่คุณยึดตามรหัสของคุณ สำรองข้อมูลของคุณและทดสอบบนสำเนา!

สิ่งนี้น่าจะใช้ได้:

Sub combine()

Dim c As Range
Dim i As Integer

For Each c In Range("A2", Cells(Cells.SpecialCells(xlCellTypeLastCell).Row, 1))
If c = c.Offset(1) And c <> "" Then
       For i = 1 To 6
            If c.Offset(1, i) <> "" Then
                c.Offset(, i) = c.Offset(1, i)
            End If
       Next
       c.Offset(1).EntireRow.Delete
End If

Next

End Sub

ขอบคุณมันใช้งานได้ดี! สิ่งนี้จะใช้งานได้กับ .asteSpecial (xlPasteFormats) หรือไม่
damm

คุณต้องแก้ไขเพื่อคัดลอก / วางหรือนำรูปแบบเซลล์ผ่าน VBA ดังนั้นไม่เลยโดยเนื้อแท้
Raystafarian
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.