Short danh sách cột mà trong đó có ô merger cell

Liên hệ QC

alex-luu

Thành viên thường trực
Tham gia
10/3/15
Bài viết
300
Được thích
52
Nhờ anh chị hướng dẫn em cách nào để sort danh sách mà trong đó có ô bị merger cell
em phải tổng hợp danh sách lịch làm việc của các văn phòng toàn quốc, sau khi gom nhiều file báo cáo của họ lại thành 1 file tổng, thì em cần sort tên văn phòng, sắp xếp theo chữ cái từ A-Z, nhưng nó không sort được vì trong đó có những ô merger cell. Em cũng không thể yêu cầu các văn phòng đừng merger cell được vì họ có thể làm cùng 1 công việc trong 3 ~4 ngày , nếu ghi 3 ~ 4 lần cùng 1 nội dung thì cũng không hay. vậy có cách nào để sort được không ạ ?


1627287468715.png
 

File đính kèm

  • Lịch làm việc 2 tuan AT _North.xlsx
    17 KB · Đọc: 11
Lần chỉnh sửa cuối:
Nguyên tắc bảng tính chứa cơ sở dữ liệu không có gộp ô gì cả.
Nếu có gộp thì không chứa dữ liệu. Chỉ gộp ô khi cần trang điểm cho đẹp và tất nhiên nó không phục vụ chứa cơ sở dữ liệu.
 
Nhờ anh chị hướng dẫn em cách nào để sort danh sách mà trong đó có ô bị merger cell
em phải tổng hợp danh sách lịch làm việc của các văn phòng toàn quốc, sau khi gom nhiều file báo cáo của họ lại thành 1 file tổng, thì em cần sort tên văn phòng, sắp xếp theo chữ cái từ A-Z, nhưng nó không sort được vì trong đó có những ô merger cell. Em cũng không thể yêu cầu các văn phòng đừng merger cell được vì họ có thể làm cùng 1 công việc trong 3 ~4 ngày , nếu ghi 3 ~ 4 lần cùng 1 nội dung thì cũng không hay. vậy có cách nào để sort được không ạ ?


View attachment 263051
Nếu không cần phải merge sau khi sort thì bạn dùng code này (UnMerge xong rồi Sort):
Rich (BB code):
Sub UnMergeAndSort()
Dim endR&

With Sheet1
    endR = .Range("B" & Rows.Count).End(xlUp).Row
    .Range("A3:R" & endR).UnMerge
    .Range("A3:R" & endR).Sort Key1:=.Range("B3"), Order1:=xlAscending, Header:=xlNo
End With
End Sub
 
Nhờ anh chị hướng dẫn em cách nào để sort danh sách mà trong đó có ô bị merger cell
em phải tổng hợp danh sách lịch làm việc của các văn phòng toàn quốc, sau khi gom nhiều file báo cáo của họ lại thành 1 file tổng, thì em cần sort tên văn phòng, sắp xếp theo chữ cái từ A-Z, nhưng nó không sort được vì trong đó có những ô merger cell. Em cũng không thể yêu cầu các văn phòng đừng merger cell được vì họ có thể làm cùng 1 công việc trong 3 ~4 ngày , nếu ghi 3 ~ 4 lần cùng 1 nội dung thì cũng không hay. vậy có cách nào để sort được không ạ ?


View attachment 263051
Bạn bỏ gộp ô đi rồi lọc không được sao.
 
Bạn bỏ gộp ô đi rồi lọc không được sao.
Bỏ gộp đi, xong sort thì được, nhưng sau khi sort xong thì mình phải gộp trở lại trả cho người ta.
Ví dụ như trường hợp này :
Nếu bỏ merger cell đi rồi sort xong thì sẽ không biết cách merge ô nào với ô nào luôn

Lưu ý : file gốc người ta không tô màu cho mình đâu. Hiện giờ em đang làm thủ công như sau : xem ô nào có merge cell thì tô màu nó lên (khác màu nhau), rồi bỏ merge , sort , xong rồi nhìn theo màu mà merge lại lần nữa rồi bỏ màu. rất mất thời gian

1627292893909.png
Bài đã được tự động gộp:

Nếu không cần phải merge sau khi sort thì bạn dùng code này (UnMerge xong rồi Sort):
Rich (BB code):
Sub UnMergeAndSort()
Dim endR&

With Sheet1
    endR = .Range("B" & Rows.Count).End(xlUp).Row
    .Range("A3:R" & endR).UnMerge
    .Range("A3:R" & endR).Sort Key1:=.Range("B3"), Order1:=xlAscending, Header:=xlNo
End With
End Sub
phải merge trở lại trả cho người ta bạn ạ, cái đó mới khó, bạn xem có cách nào khác không. Hiện giờ mình đang làm bằng tay như sau : tìm bằng mắt, những ô nào đang merge , tô màu khác nhau, rồi bỏ merge , sort , rồi nhìn theo màu mà merge lại lần nữa, cuối cùng là bỏ màu. Mất rất nhiều thòi gian
 
Bỏ gộp đi, xong sort thì được, nhưng sau khi sort xong thì mình phải gộp trở lại trả cho người ta.
Ví dụ như trường hợp này :
Nếu bỏ merger cell đi rồi sort xong thì sẽ không biết cách merge ô nào với ô nào luôn

Lưu ý : file gốc người ta không tô màu cho mình đâu. Hiện giờ em đang làm thủ công như sau : xem ô nào có merge cell thì tô màu nó lên (khác màu nhau), rồi bỏ merge , sort , xong rồi nhìn theo màu mà merge lại lần nữa rồi bỏ màu. rất mất thời gian

View attachment 263058
Nếu code VBA thì cũng phải theo trình tự gần như vậy, chỉ là không cần tô màu
 
Bỏ gộp đi, xong sort thì được, nhưng sau khi sort xong thì mình phải gộp trở lại trả cho người ta.
Ví dụ như trường hợp này :
Nếu bỏ merger cell đi rồi sort xong thì sẽ không biết cách merge ô nào với ô nào luôn

Lưu ý : file gốc người ta không tô màu cho mình đâu. Hiện giờ em đang làm thủ công như sau : xem ô nào có merge cell thì tô màu nó lên (khác màu nhau), rồi bỏ merge , sort , xong rồi nhìn theo màu mà merge lại lần nữa rồi bỏ màu. rất mất thời gian

View attachment 263058
Copy sang sheet mới rồi mình muốn làm gì thì làm có hơn không, không động đến file gốc.
 
Nếu code VBA thì cũng phải theo trình tự gần như vậy, chỉ là không cần tô màu
làm bằng tay bị sai hoài luôn, cực dã man, lý do : tô màu không hết, do nhìn bằng mắt, tìm những ô nào có merge rồi tô màu sau đó sort , rồi merge lại. Vấn đề là ngay khúc đầu nếu làm thiếu , tức là có những ô có merge mà mình không nhìn thấy ==> không tô màu ==> sau khi sort thì những ngày phía sau trở thành ô trống ==> xem như những ngày đó họ không có làm việc ==> họ sẽ la làng lên, tui có merge ghi là 3 ngày đó tui làm cùng 1 việc mà sao ghi tui làm có 1 ngày đầu còn 2 ngày sau không có ? hazz, cực kỳ mệt mỏi
 
làm bằng tay bị sai hoài luôn, cực dã man, lý do : tô màu không hết, do nhìn bằng mắt, tìm những ô nào có merge rồi tô màu sau đó sort , rồi merge lại. Vấn đề là ngay khúc đầu nếu làm thiếu , tức là có những ô có merge mà mình không nhìn thấy ==> không tô màu ==> sau khi sort thì những ngày phía sau trở thành ô trống ==> xem như những ngày đó họ không có làm việc ==> họ sẽ la làng lên, tui có merge ghi là 3 ngày đó tui làm cùng 1 việc mà sao ghi tui làm có 1 ngày đầu còn 2 ngày sau không có ? hazz, cực kỳ mệt mỏi
Cho tôi hỏi: Dữ liệu thực của bạn có chừng bao nhiêu cột? dòng?
 
Copy sang sheet mới rồi mình muốn làm gì thì làm có hơn không, không động đến file gốc.
9 xác, em cũng copy qua sheet mới, vấn đề là em cũng phải làm thủ công như vậy. Sheet cũ dùng để đối chiếu lại lần nữa sau khi sort. mà đối chiếu thì cũng là nhìn bằng mắt thôi, vì hàm tìm kiếm nó không nhìn thấy những ô có merge. Em bị sót hoài nên mới đưa file lên đây nhờ mọi người giúp em cách làm, không làm thủ công nữa
 
làm bằng tay bị sai hoài luôn, cực dã man, lý do : tô màu không hết, do nhìn bằng mắt, tìm những ô nào có merge rồi tô màu sau đó sort , rồi merge lại. Vấn đề là ngay khúc đầu nếu làm thiếu , tức là có những ô có merge mà mình không nhìn thấy ==> không tô màu ==> sau khi sort thì những ngày phía sau trở thành ô trống ==> xem như những ngày đó họ không có làm việc ==> họ sẽ la làng lên, tui có merge ghi là 3 ngày đó tui làm cùng 1 việc mà sao ghi tui làm có 1 ngày đầu còn 2 ngày sau không có ? hazz, cực kỳ mệt mỏi
Chỉ có gộp ô hàng ngang hay cả dọc hả bạn.
 
chỉ gộp ngang thôi bạn, không có gộp dọc. Mỗi hàng ngang là 1 người nên không có chuyện gộp doc.
Bài đã được tự động gộp:

Cho tôi hỏi: Dữ liệu thực của bạn có chừng bao nhiêu cột? dòng?
cột thì cố định từ A:R (tương đương 2 tuần lễ) báo cáo 1 lần.
Hàng thì là tên nhân viên nên chưa biết, lúc nhiều lúc ít, thường khoảng dưới 100 hàng
 
Nguyên tắc bảng tính chứa cơ sở dữ liệu không có gộp ô gì cả.
Nếu có gộp thì không chứa dữ liệu. Chỉ gộp ô khi cần trang điểm cho đẹp và tất nhiên nó không phục vụ chứa cơ sở dữ liệu.
Không chỉ riêng vấn đề CSDL. Luật cơ bản là bảng còn dùng để tính toán thì không gộp ô.
Bảng dùng để xem mới muốn gộp, màu mè gì thì màu.
 
Không chỉ riêng vấn đề CSDL. Luật cơ bản là bảng còn dùng để tính toán thì không gộp ô.
Bảng dùng để xem mới muốn gộp, màu mè gì thì màu.
Dạ em hiểu ạ. nhưng mấy file báo cáo này là do các bạn quản lý của từng văn phòng, thống kê lịch làm việc của từng người trong văn phòng rồi gởi về cho quản lý từng vùng. Quản lý từng vùng sẽ ghép toàn bộ lại rồi gởi về cho em. Nếu em kêu họ đừng merge cell thì ví dụ 1 người đó làm cùng 1 việc trong 4 ngày thì họ phải ghi 4 lần giống nhau, tới em, sau khi tổng hợp xong , em trình lên trên thì em cũng phải merge lại, vì em không thể để hiển thị kiểu 4 ngày , 4 ô cùng 1 nội dung giống nhau như thế được..
Vấn đề là ở chỗ em tổng hợp toàn quốc nên em phải sort theo A-Z tên của VP, chứ họ chỉ có 1 văn phòng nên họ không cần sort. Từ đây mới phát sinh rắc rối
 
Lần chỉnh sửa cuối:
Dạ em hiểu ạ. nhưng mấy file báo cáo này là do các bạn quản lý của từng văn phòng, thống kê lịch làm việc của từng người trong văn phòng rồi gởi về cho quản lý vùng. Quản lý vùng ghép toàn bộ lại rồi gởi về cho em. Nếu em kêu họ đừng merge cell thì ví dụ 1 người đó làm cùng 1 việc trong 4 ngày thì họ phải ghi 4 lần giống nhau, tới em, sau khi tổng hợp xong , em trình lên trên thì em cũng phải merge lại, vì em không thể để hiển thị kiểu 4 ngày , 4 ô cùng 1 nội dung giống nhau như thế được..
Vấn đề là ở chỗ em tổng hợp toàn quốc nên em phải sort theo A-Z tên của VP. Từ đây mới phát sinh rắc rối
Tôi chỉ nhắc chung chung cho các bạn trên diễn đàn.
Tôi ở đây lâu đủ để biết người hỏi luôn luôn có cái lý do để bảo vệ thiết kế file của mình.
Dân kỹ thuật có câu: muốn thì tìm cách, không muốn thì tìm cớ. (có câu hơi khác: muốn thì sẵn sàng, không muốn thì sẵn cớ)

Chỉ riêng cái này tôi còn không hiểu nữa thì nói chuyện sửa đổi chi
với tôi, shorten là cắt ngắn, short là tắt ngang (short circuit là mát dây); merger là hai công ty gần cỡ với nhau nhập lại.
1627303128999.png
 
Lần chỉnh sửa cuối:
cột thì cố định từ A:R (tương đương 2 tuần lễ) báo cáo 1 lần.
Hàng thì là tên nhân viên nên chưa biết, lúc nhiều lúc ít, thường khoảng dưới 100 hàng
Bạn chạy code này
Mã:
Sub SapXepX()
Dim i&, j&, k&, m&, endR&
Dim GT
Dim arrN, arrM, arrSM

Application.ScreenUpdating = False
ReDim arrN(1 To 1000, 1 To 2)
ReDim arrM(1 To 1000, 1 To 14)
ReDim arrSM(1 To 1000, 1 To 14)
With Sheet1
    endR = .Range("B" & Rows.Count).End(xlUp).Row
    For i = 3 To endR
        GT = .Range("H" & i & ":R" & i).MergeCells
        If IsNull(GT) Then
            k = k + 1
            arrN(k, 1) = .Cells(i, 2)
            arrN(k, 2) = .Cells(i, 3)
            For j = 5 To 18
                If .Cells(i, j).MergeCells Then
                    m = m + 1
                    arrM(k, m) = j
                    arrSM(k, m) = .Cells(i, j).MergeArea.Columns.Count
                    j = j + arrSM(k, m) - 1
                End If
            Next
            m = 0
        End If
    Next
    .Range("A3:R" & endR).UnMerge
    .Range("A3:R" & endR).Sort Key1:=.Range("B3"), Order1:=xlAscending, Header:=xlNo
    For i = 3 To endR
        For j = 1 To k
            If .Cells(i, 2) = arrN(j, 1) And .Cells(i, 3) = arrN(j, 2) Then
                For m = 1 To 14
                    If Not IsEmpty(arrM(j, m)) Then
                        .Range(.Cells(i, arrM(j, m)), .Cells(i, arrM(j, m) + arrSM(j, m) - 1)).Merge
                    End If
                Next
            End If
        Next
    Next
End With
Application.ScreenUpdating = True
End Sub
Bài đã được tự động gộp:

2 ông post bài giải 1 lần, hehe!
 
Dạ em hiểu ạ. nhưng mấy file báo cáo này là do các bạn quản lý của từng văn phòng, thống kê lịch làm việc của từng người trong văn phòng rồi gởi về cho quản lý vùng. Quản lý vùng ghép toàn bộ lại rồi gởi về cho em. Nếu em kêu họ đừng merge cell thì ví dụ 1 người đó làm cùng 1 việc trong 4 ngày thì họ phải ghi 4 lần giống nhau, tới em, sau khi tổng hợp xong , em trình lên trên thì em cũng phải merge lại, vì em không thể để hiển thị kiểu 4 ngày , 4 ô cùng 1 nội dung giống nhau như thế được..
Vấn đề là ở chỗ em tổng hợp toàn quốc nên em phải sort theo A-Z tên của VP. Từ đây mới phát sinh rắc rối

ủa vậy là bạn làm bỏ gộp ô, tô màu sẵn, mình sort A-Z xong sẽ merge cell lại bằng tay dựa theo màu hả
 
Web KT
Back
Top Bottom