Ini adalah VBA, atau makro yang bisa Anda jalankan di sheet Anda. Anda harus menekan alt+ F11untuk membuka prompt Visual Basic for Application, buka buku kerja Anda right click - insert - module
dan tempel kode ini di sana. Anda kemudian dapat menjalankan modul dari dalam VBA dengan menekan F5. Makro ini bernama "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
Ini akan dijalankan melalui spreadsheet yang diurutkan dan menggabungkan baris berturut-turut yang cocok dengan pelanggan dan tahun dan menghapus baris yang sekarang kosong. Spreadsheet harus diurutkan sesuai cara Anda menyajikannya, pelanggan dan tahun naik, makro khusus ini tidak akan terlihat di luar baris berturut-turut .
Sunting - sangat mungkin saya with statement
benar-benar tidak dibutuhkan, tetapi tidak menyakiti siapa pun ..
REVISASI 02/28/14
Seseorang menggunakan jawaban ini dalam pertanyaan lain dan ketika saya kembali saya pikir VBA ini buruk. Saya telah memperbaikinya -
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
Revisited 05/04/16
Ditanya lagi Bagaimana cara menggabungkan nilai dari beberapa baris menjadi satu baris? Memiliki modul, tetapi perlu menjelaskan variabel dan sekali lagi, itu sangat buruk.
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
Namun, tergantung pada masalahnya, mungkin lebih baik step -1
menggunakan nomor baris sehingga tidak ada yang terlewati.
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
Cara paling efektif untuk melakukan ini adalah membuang semua data ke dalam Tabel Pivot dan memasukkan 'Pelanggan' ke dalam Label Baris dan kemudian menindaklanjuti dengan kolom lainnya. Anda dapat memasukkan 'Tahun' ke dalam tajuk kolom jika Anda ingin melihat rinciannya menurut tahun
Tabel Pivot dapat ditemukan di bawah Sisipkan di Excel 2010
sumber
Berikut adalah langkah-langkah untuk membuat tabel terpisah dengan data yang diringkas.
Customer
danYear
. Ini akan memberikan kerangka kerja untuk tabel kental.Di B2 (entri pertama untuk
Value A
) masukkan berikut ini:=IFERROR(INDEX(Sheet1!B$1:B$11,MIN(IF(Sheet1!$A$1:$A$11=$A2,IF(Sheet1!$D$1:$D$11=$D2,IF(Sheet1!B$1:B$11<>"",ROW(Sheet1!$A$1:$A$11),1000000),1000000),1000000))),"")
Masukkan rumus sebagai rumus array dengan menekan Ctrl+ Shift+ Enter.
Isi formula di bawah kolom. Kemudian isi untuk mengisi
Value B
kolom juga. Voila!Beberapa catatan:
1000000
s dalam rumus menjadi sesuatu yang lebih besar dari jumlah baris Anda.sumber
Semua orang menggunakan banyak kode VBA atau fungsi rumit untuk ini. Saya memiliki metode yang membutuhkan waktu satu detik untuk diterapkan tetapi jauh lebih mudah dipahami dan sangat mudah untuk disesuaikan tergantung pada berbagai kemungkinan lainnya.
Dalam contoh yang Anda berikan di atas, rekatkan masing-masing (4) fungsi ini ke dalam sel, E2, F2, G2, dan H2 (sel referensi fungsi F&G di atas):
Seret formula ini sejauh yang diperlukan. Ini menghasilkan satu baris data setiap kali 2 baris hadir, meninggalkan baris tunggal tidak terpengaruh. Rekatkan nilai khusus (untuk menghapus formula) kolom EFGH di tempat lain dan urutkan berdasarkan pelanggan untuk menghapus semua baris tambahan.
sumber