MERGE các hàng lại với nhau

  • Thread starter Thread starter LOIKS
  • Ngày gửi Ngày gửi
Liên hệ QC
vậy thêm 1 bước sort nữa trước khi chạy đoạn code merge là được mà, bạn biết record macro chứ?
ok bạn mình biết rồi, cảm ơn nhiều nhé
Bài đã được tự động gộp:

vậy thêm 1 bước sort nữa trước khi chạy đoạn code merge là được mà, bạn biết record macro chứ?
cái này củng ko được vì số cấu kiện nó sắp xếp ko theo thứ tự
 
Lần chỉnh sửa cuối:
ok bạn mình biết rồi, cảm ơn nhiều nhé
Bài đã được tự động gộp:


cái này củng ko được vì số cấu kiện nó sắp xếp ko theo thứ tự
bạn thử code này xem
(xem thêm file đính kèm vì vùng dữ liệu của bạn đã thay đổi)
Mã:
sub merge
Dim LR As Long, i As Long, Arr As Range, Rng As Range
Dim k As Long, LR1 As Long
LR1 = Sheets("du lieu").Cells(Rows.Count, "L").End(xlUp).Row
LR = Sheets("du lieu").Cells(Rows.Count, "B").End(xlUp).Row
Sheets("du lieu").Range("A2:A" & LR).UnMerge
Set Arr = Sheets("du lieu").Range("B2:B" & LR)
For Each Rng In Arr
    With Sheets("du lieu")
        For k = 2 To LR1
            If Rng = .Range("L" & k) Or Rng = .Range("M" & k) Or Rng = .Range("N" & k) Then
                Rng.Offset(0, -1).Value = .Range("K" & k)
            End If
        Next k
    End With
Next Rng
'---------- sort
Sheet5.Range("A2:B" & LR).Sort [B2], xlAscending, [A2], Value, xlAscending
'-------------meger
Application.DisplayAlerts = False
For i = LR To 2 Step -1
    With Sheets("du lieu")
        If .Cells(i, "A") = .Cells(i - 1, "A") Then
            .Range(Cells(i, "A"), Cells(i - 1, "A")).merge
        End If
    End With
Next i
Application.DisplayAlerts = True
Set Arr = Nothing
end sub
 

File đính kèm

bạn thử code này xem
(xem thêm file đính kèm vì vùng dữ liệu của bạn đã thay đổi)
Mã:
sub merge
Dim LR As Long, i As Long, Arr As Range, Rng As Range
Dim k As Long, LR1 As Long
LR1 = Sheets("du lieu").Cells(Rows.Count, "L").End(xlUp).Row
LR = Sheets("du lieu").Cells(Rows.Count, "B").End(xlUp).Row
Sheets("du lieu").Range("A2:A" & LR).UnMerge
Set Arr = Sheets("du lieu").Range("B2:B" & LR)
For Each Rng In Arr
    With Sheets("du lieu")
        For k = 2 To LR1
            If Rng = .Range("L" & k) Or Rng = .Range("M" & k) Or Rng = .Range("N" & k) Then
                Rng.Offset(0, -1).Value = .Range("K" & k)
            End If
        Next k
    End With
Next Rng
'---------- sort
Sheet5.Range("A2:B" & LR).Sort [B2], xlAscending, [A2], Value, xlAscending
'-------------meger
Application.DisplayAlerts = False
For i = LR To 2 Step -1
    With Sheets("du lieu")
        If .Cells(i, "A") = .Cells(i - 1, "A") Then
            .Range(Cells(i, "A"), Cells(i - 1, "A")).merge
        End If
    End With
Next i
Application.DisplayAlerts = True
Set Arr = Nothing
end sub
VÌ DỬ LIỆU TRONG BẢNG RANGE(K1:N3) với STT "A12" có các cấu kiện được sắp xếp theo từ B114-B109-B108
mình muốn sau khi merge tại cột "B" thì với STT "A12" các cấu kiện được sắp xếp theo từ B114-B109-B108
 

File đính kèm

  • 1111111111111111111111.png
    1111111111111111111111.png
    3.5 KB · Đọc: 7
  • 222222222222222222222222.png
    222222222222222222222222.png
    3.7 KB · Đọc: 7
VÌ DỬ LIỆU TRONG BẢNG RANGE(K1:N3) với STT "A12" có các cấu kiện được sắp xếp theo từ B114-B109-B108
mình muốn sau khi merge tại cột "B" thì với STT "A12" các cấu kiện được sắp xếp theo từ B114-B109-B108
vậy sao sheet kết quả mong muốn lại viết như vậy?
1537166262796.png
 
mình nhầm khúc này, sorry ban nha
Giải pháp của mình đây,
Mã:
sub merge()

Dim LR As Long, i As Long, Arr As Range, Rng As Range
Dim k As Long, LR1 As Long
LR1 = Sheets("du lieu").Cells(Rows.Count, "L").End(xlUp).Row
LR = Sheets("du lieu").Cells(Rows.Count, "B").End(xlUp).Row
Sheets("du lieu").Range("A2:A" & LR).UnMerge
Set Arr = Sheets("du lieu").Range("B2:B" & LR)
For Each Rng In Arr
    With Sheets("du lieu")
        For k = 2 To LR1
            If Rng.Value = .Range("L" & k).Value Or Rng.Value = .Range("M" & k).Value Or Rng.Value = .Range("N" & k).Value Then
                Rng.Offset(0, -1).Value = .Range("K" & k)
            End If
            If Rng.Value = .Range("L" & k).Value Then
                Rng.Font.Color = 100
            End If
            If Rng.Value = .Range("M" & k).Value Then
                Rng.Font.Color = 2000
            End If
            If Rng.Value = .Range("N" & k).Value Then
                Rng.Font.Color = 30000
            End If
        Next k
    End With
Next Rng
'---------- sort
Sheet5.Sort.SortFields.Clear
With ActiveSheet.Sort
 .SortFields.Add Key:=[A2], SortOn:=xlSortOnValues, Order:=xlAscending
 .SortFields.Add([B2], xlSortOnFontColor).SortOnValue.Color = 100
 .SortFields.Add([B2], xlSortOnFontColor).SortOnValue.Color = 2000
 .SortFields.Add([B2], xlSortOnFontColor).SortOnValue.Color = 30000
 .SetRange Range("A1:B" & LR)
 .Header = xlYes
 .Apply
End With
Sheet5.Range("A1:B" & LR).Font.Color = 0
'-------------meger
Application.DisplayAlerts = False
For i = LR To 2 Step -1
    With Sheets("du lieu")
        If .Cells(i, "A") = .Cells(i - 1, "A") Then
            .Range(Cells(i, "A"), Cells(i - 1, "A")).merge
        End If
    End With
Next i
Application.DisplayAlerts = True
Set Arr = Nothing
End Sub
 
Góp ý với chủ topic là không nên sử dụng cách này để xử lý dữ liệu. Sau này sẽ hối tiếc sau trước đây mình lại làm như vậy

Gợi ý là dùng công thức để gán dữ liệu vào cột A. Sau này bạn sẽ thấy được sự lợi hại của cách này. Cứ từ từ mà thấm nhé

Excel tối kỵ việc Merged cells nếu muốn xử lý data nhanh và thuận tiện. Còn nếu dùng để in báo cáo thì cứ ẩn cột đầy đủ lại, tạo thêm cột phụ rồi trộn cells chỉ cột đó thôi. Theo kinh nghiệm là vậy.

@ Nguyenthuy13388

Nếu có vài chục ngàn dòng mà trộn từng cell thì chậm lắm. Có chăng nên dùng kỹ thuật Autofilter để trộn sẽ nhanh hơn rất nhiều. Mình thấy mọi người trên GPE toàn gom lại rồi Merged từng nhóm.

Đang rảnh nên tào lao tí, không vừa ý thì bỏ qua hén

1537173719646.png
 
Giải pháp của mình đây,
Mã:
sub merge()

Dim LR As Long, i As Long, Arr As Range, Rng As Range
Dim k As Long, LR1 As Long
LR1 = Sheets("du lieu").Cells(Rows.Count, "L").End(xlUp).Row
LR = Sheets("du lieu").Cells(Rows.Count, "B").End(xlUp).Row
Sheets("du lieu").Range("A2:A" & LR).UnMerge
Set Arr = Sheets("du lieu").Range("B2:B" & LR)
For Each Rng In Arr
    With Sheets("du lieu")
        For k = 2 To LR1
            If Rng.Value = .Range("L" & k).Value Or Rng.Value = .Range("M" & k).Value Or Rng.Value = .Range("N" & k).Value Then
                Rng.Offset(0, -1).Value = .Range("K" & k)
            End If
            If Rng.Value = .Range("L" & k).Value Then
                Rng.Font.Color = 100
            End If
            If Rng.Value = .Range("M" & k).Value Then
                Rng.Font.Color = 2000
            End If
            If Rng.Value = .Range("N" & k).Value Then
                Rng.Font.Color = 30000
            End If
        Next k
    End With
Next Rng
'---------- sort
Sheet5.Sort.SortFields.Clear
With ActiveSheet.Sort
.SortFields.Add Key:=[A2], SortOn:=xlSortOnValues, Order:=xlAscending
.SortFields.Add([B2], xlSortOnFontColor).SortOnValue.Color = 100
.SortFields.Add([B2], xlSortOnFontColor).SortOnValue.Color = 2000
.SortFields.Add([B2], xlSortOnFontColor).SortOnValue.Color = 30000
.SetRange Range("A1:B" & LR)
.Header = xlYes
.Apply
End With
Sheet5.Range("A1:B" & LR).Font.Color = 0
'-------------meger
Application.DisplayAlerts = False
For i = LR To 2 Step -1
    With Sheets("du lieu")
        If .Cells(i, "A") = .Cells(i - 1, "A") Then
            .Range(Cells(i, "A"), Cells(i - 1, "A")).merge
        End If
    End With
Next i
Application.DisplayAlerts = True
Set Arr = Nothing
End Sub
hay quá bạn ơi, cho mình hỏi tý về code này tý nhé
If Rng.Value = .Range("L" & k).Value Or Rng.Value = .Range("M" & k).Value Or Rng.Value = .Range("N" & k).Value Or Rng.Value = .Range("O" & k).Value Or Rng.Value = .Range("p" & k).Value Then
Rng.Offset(0, -1).Value = .Range("K" & k)
 
em xin tiếp thu ý kiến của anh, tuy nhiên cho em hỏi kỹ hơn phần này được không ạ?
Mình thấy mọi người trên GPE toàn gom lại rồi Merged từng nhóm
hiện em chỉ biết có 1 cách là: sort dữ liệu rồi dùng for đi từng cell để merge thôi ạ.
Bài đã được tự động gộp:

hay quá bạn ơi, cho mình hỏi tý về code này tý nhé
If Rng.Value = .Range("L" & k).Value Or Rng.Value = .Range("M" & k).Value Or Rng.Value = .Range("N" & k).Value Or Rng.Value = .Range("O" & k).Value Or Rng.Value = .Range("p" & k).Value Then
Rng.Offset(0, -1).Value = .Range("K" & k)
cái này mình mới thêm ".value" vì sợ màu chữ khác thì điều kiện if sẽ false
 
Góp ý với chủ topic là không nên sử dụng cách này để xử lý dữ liệu. Sau này sẽ hối tiếc sau trước đây mình lại làm như vậy

Gợi ý là dùng công thức để gán dữ liệu vào cột A. Sau này bạn sẽ thấy được sự lợi hại của cách này. Cứ từ từ mà thấm nhé

Excel tối kỵ việc Merged cells nếu muốn xử lý data nhanh và thuận tiện. Còn nếu dùng để in báo cáo thì cứ ẩn cột đầy đủ lại, tạo thêm cột phụ rồi trộn cells chỉ cột đó thôi. Theo kinh nghiệm là vậy.

@ Nguyenthuy13388

Nếu có vài chục ngàn dòng mà trộn từng cell thì chậm lắm. Có chăng nên dùng kỹ thuật Autofilter để trộn sẽ nhanh hơn rất nhiều. Mình thấy mọi người trên GPE toàn gom lại rồi Merged từng nhóm.

Đang rảnh nên tào lao tí, không vừa ý thì bỏ qua hén

View attachment 204056

mình chỉ sợ là nó nhièu côt bên này rồi code chổ này phải thêm vào thôi
 

File đính kèm

  • 11111111111111.png
    11111111111111.png
    6.4 KB · Đọc: 5
  • 2222222222222222222.png
    2222222222222222222.png
    3.6 KB · Đọc: 5
to Nguyenthuy:
Trong file là cách mình học mergecells từ GPE
to chủ topic:
Bố trí dữ liệu rất quan trọng. Càng khoa học thì càng dễ chỉnh sửa thêm bớt sau này
Mình gởi bạn một mẫu dữ liệu đơn giản và cách mình thực hiện yêu cầu của bạn. Khi cần thêm cấu kiện bạn cứ việc thêm vào ở sheet STT như mẫu là được
 

File đính kèm

to Nguyenthuy:
Trong file là cách mình học mergecells từ GPE
to chủ topic:
Bố trí dữ liệu rất quan trọng. Càng khoa học thì càng dễ chỉnh sửa thêm bớt sau này
Mình gởi bạn một mẫu dữ liệu đơn giản và cách mình thực hiện yêu cầu của bạn. Khi cần thêm cấu kiện bạn cứ việc thêm vào ở sheet STT như mẫu là được
cảm ơn bạn nhé, tuy nhiên mình chỉ hiểu nôm na vụ Mergecells là autofilter thành từng nhóm và merge lại. chứ code này chắc phải thời gian nữa mình mới hiểu dc hết
 
Web KT

Bài viết mới nhất

Back
Top Bottom