VBA 또는 시트에서 실행할 수있는 매크로입니다. 너는 명중해야한다 대체 + F11 Visual Basic for Applications 프롬프트를 표시하려면 통합 문서로 이동 한 다음 right click - insert - module
이 코드를 붙여 넣으십시오. 그런 다음 VBA 내에서 모듈을 실행할 수 있습니다. F5 . 이 매크로의 이름은 "test"입니다.
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
이것은 정렬 된 스프레드 시트 결합하다 연속 된 행 고객 및 연도 모두와 일치하고 빈 행을 삭제합니다. 스프레드 시트는 사용자가 제시 한 방식, 고객 및 연도 오름차순으로 정렬되어야하며, 이 특정 매크로는 연속적인 행을 넘어서 보일 수 없습니다. .
수정 - 전적으로 가능합니다. with statement
완전히 불필요하지만 아무도 아프지 않습니다.
개정 됨 02/28/14
다른 사람이이 대답을 사용했습니다. 의문 그리고 내가 돌아 왔을 때 나는이 VBA 가난하다고 생각했다. 나는 그것을 다시했다 -
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
재검토 05/04/16
다시 물었다. 여러 행의 값을 단일 행으로 결합하는 방법? 모듈이 있지만 설명하는 변수가 필요합니다. 그리고 다시, 그것은 꽤 가난합니다.
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
그러나 문제에 따라 더 좋을 수도 있습니다. step -1
아무 것도 건너 뛰지 않도록 행 번호에.
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