Đây là VBA hoặc macro bạn có thể chạy trên trang tính của mình. Bạn phải nhấn alt+ F11để hiển thị dấu nhắc Visual Basic for Application, truy cập sổ làm việc của bạn right click - insert - module
và dán mã này vào đó. Sau đó, bạn có thể chạy mô-đun từ bên trong VBA bằng cách nhấn F5. Macro này được đặt tên là "thử nghiệm"
Sub test()
'define variables
Dim RowNum as long, LastRow As long
'turn off screen updating
Application.ScreenUpdating = False
'start below titles and make full selection of data
RowNum = 2
LastRow = Cells.SpecialCells(xlCellTypeLastCell).Row
Range("A2", Cells(LastRow, 4)).Select
'For loop for all rows in selection with cells
For Each Row In Selection
With Cells
'if customer name matches
If Cells(RowNum, 1) = Cells(RowNum + 1, 1) Then
'and if customer year matches
If Cells(RowNum, 4) = Cells(RowNum + 1, 4) Then
'move attribute 2 up next to attribute 1 and delete empty line
Cells(RowNum + 1, 3).Copy Destination:=Cells(RowNum, 3)
Rows(RowNum + 1).EntireRow.Delete
End If
End If
End With
'increase rownum for next test
RowNum = RowNum + 1
Next Row
'turn on screen updating
Application.ScreenUpdating = True
End Sub
Điều này sẽ chạy qua một bảng tính được sắp xếp và kết hợp các hàng liên tiếp phù hợp với cả khách hàng và năm và xóa hàng trống bây giờ. Bảng tính phải được sắp xếp theo cách bạn đã trình bày, khách hàng và năm tăng dần, macro cụ thể này sẽ không nhìn xa hơn các hàng liên tiếp .
Chỉnh sửa - hoàn toàn có thể tôi with statement
hoàn toàn không cần thiết, nhưng nó không làm tổn thương bất cứ ai ..
DOANH THU 02/11/14
Ai đó đã sử dụng câu trả lời này trong một câu hỏi khác và khi tôi quay lại, tôi nghĩ rằng VBA này kém. Tôi đã làm lại nó -
Sub CombineRowsRevisited()
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.Offset(,4) = c.Offset(1,4) Then
c.Offset(,3) = c.Offset(1,3)
c.Offset(1).EntireRow.Delete
End If
Next
End Sub
Xem lại ngày 04/05/2016
Hỏi lại Làm thế nào để kết hợp các giá trị từ nhiều hàng thành một hàng? Có một mô-đun, nhưng cần các biến giải thích và một lần nữa, nó khá nghèo.
Sub CombineRowsRevisitedAgain()
Dim myCell As Range
Dim lastRow As Long
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
For Each myCell In Range(Cells("A2"), Cells(lastRow, 1))
If (myCell = myCell.Offset(1)) And (myCell.Offset(0, 4) = myCell.Offset(1, 4)) Then
myCell.Offset(0, 3) = myCell.Offset(1, 3)
myCell.Offset(1).EntireRow.Delete
End If
Next
End Sub
Tuy nhiên, tùy thuộc vào vấn đề, có thể tốt hơn là step -1
trên một số hàng để không có gì bị bỏ qua.
Sub CombineRowsRevisitedStep()
Dim currentRow As Long
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For currentRow = lastRow To 2 Step -1
If Cells(currentRow, 1) = Cells(currentRow - 1, 1) And _
Cells(currentRow, 4) = Cells(currentRow - 1, 4) Then
Cells(currentRow - 1, 3) = Cells(currentRow, 3)
Rows(currentRow).EntireRow.Delete
End If
Next
End Sub