Add-in Merge Cells không mất dữ liệu.

Liên hệ QC

ptlong04x1

Thành viên tích cực
Tham gia
15/10/08
Bài viết
1,031
Được thích
1,531
Nghề nghiệp
Kỹ sư xây dựng
Mình vừa làm Add-in này dùng để Merge Cells mà không làm mất dữ liệu, dữ liệu mới sẽ là toàn bộ dữ liệu trong các Cell được Merge. Chỉ là đoạn Code đơn giản nhưng mình thấy nó có ích cho công việc của mình, xin chia sẻ với mọi người.

Chọn vùng dữ liệu cần Merge --> nhấn tổ hợp phím Ctrl Shift Z.

PHP:
Sub MrgCll()
    Dim Cll As Range, Temp As String
    On Error Resume Next
    If Selection.MergeCells = False Then
        For Each Cll In Selection
            If Cll <> "" Then Temp = Temp + Cll.Text + " "
        Next Cll
        Selection.Merge
        Selection.Value = Left(Temp, Len(Temp) - 1)
    Else
        Selection.UnMerge
    End If
     Selection.HorizontalAlignment = xlCenter
    Selection.VerticalAlignment = xlCenter
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
chibi đã viết:
Phần màu đỏ chỉ áp dụng trên máy của bạn được thôi.

ptlong04x1 đã viết:
Bạn giải thích giúp mình vì sao với. Chỉ là mình gán phím tắt cho Macro thôi mà. Tại sao sang máy khác lại không dùng được nhỉ.
Vẫn sử dụng được nếu chạy từ Merge Cells.xla của ptlong04x1. Còn nếu lấy code về tạo trong bảng tính mới thì phải tạo phím tắt lại.
 
Lần chỉnh sửa cuối:
wa hay. Minh dang rat can nhung phan mêm như vậy
 
Được voi đòi Hằng Nga đây:

Vậy xin tác giả cho luôn phép biến đổi ngược nữa được không;
Nghĩa là nếu vùng chọn là những ô đã trộn thì sẽ bỏ trộn & trả dữ liệu về các ô ban đầu, khì, khì, . . .

Ví dụ ban đầu
|A|B|C|
|Hoan hô|Chiến sỹ|Điện biên|

Thực hiện trộn:

|A|
|Hoan hô chiến sỹ Điện biên|
Nếu thực hiện bỏ trộn, để có thể về ban đầu:

|A|B|C|
|Hoan hô|Chiến sỹ|Điện biên|
 
Hic, bó tay!

Vậy xin tác giả cho luôn phép biến đổi ngược nữa được không;
Nghĩa là nếu vùng chọn là những ô đã trộn thì sẽ bỏ trộn & trả dữ liệu về các ô ban đầu, khì, khì, . . .

Ví dụ ban đầu
|A|B|C|
|Hoan hô|Chiến sỹ|Điện biên|
Thực hiện trộn:

|A|
|Hoan hô chiến sỹ Điện biên|
Nếu thực hiện bỏ trộn, để có thể về ban đầu:

|A|B|C|
|Hoan hô|Chiến sỹ|Điện biên|

Mình viết cái này lúc mới tập tành VBA, chủ yếu phục vụ cho nhu cầu "vọc", sau này thấy Merge nhiều quá tự nhiên gây khó cho mình trong việc xử lý, tìm kiếm dữ liệu. Bây giờ muốn UnMerge mà "ai về nhà nấy" thì làm sao để nhớ được "nhà cũ" của mấy cái cell bị Merge đây??? --=0
 
Một tiện ích đúng như tên của nó, tuyệt vời, cán ơn nha
 
Thank bạn nhiều nhiều/ Add ins rất bổ ích^^
P/s: Dear ptlong01x1:
Nếu mình muốn chỉnh sang một phím tắt khác thì làm thế nào hả bạn?


Mình vừa làm Add-in này dùng để Merge Cells mà không làm mất dữ liệu, dữ liệu mới sẽ là toàn bộ dữ liệu trong các Cell được Merge. Chỉ là đoạn Code đơn giản nhưng mình thấy nó có ích cho công việc của mình, xin chia sẻ với mọi người.

Chọn vùng dữ liệu cần Merge --> nhấn tổ hợp phím Ctrl Shift Z.

PHP:
Sub MrgCll()
    Dim Cll As Range, Temp As String
    On Error Resume Next
    If Selection.MergeCells = False Then
        For Each Cll In Selection
            If Cll <> "" Then Temp = Temp + Cll.Text + " "
        Next Cll
        Selection.Merge
        Selection.Value = Left(Temp, Len(Temp) - 1)
    Else
        Selection.UnMerge
    End If
     Selection.HorizontalAlignment = xlCenter
    Selection.VerticalAlignment = xlCenter
End Sub
 
quá hay, thanks nhiều nhé, nhưng mình có 1 góp ý là: chẳng hạn mình có 2 cột chứ ko phải 2 ô và mình muốn trộn 2 ô tương ứng trong 2 cột thành 1 ô để tạo thành 1 cột duy nhất chứ ko phải trộn thủ công từng đôi ô một thì đoạn vba của bạn lại ko hữu dụng nữa, bạn có cách giải quyết ko!?
 
quá hay, thanks nhiều nhé, nhưng mình có 1 góp ý là: chẳng hạn mình có 2 cột chứ ko phải 2 ô và mình muốn trộn 2 ô tương ứng trong 2 cột thành 1 ô để tạo thành 1 cột duy nhất chứ ko phải trộn thủ công từng đôi ô một thì đoạn vba của bạn lại ko hữu dụng nữa, bạn có cách giải quyết ko!?

PHP:
Sub Mer()
    Dim cll As Range, i As Long, tmp As String
    
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    On Error Resume Next
    If Selection(1).MergeCells = True Then
        Selection.UnMerge = True
    Else
        For Each cll In Selection.Resize(Selection.Rows.Count, 1)
            tmp = cll & " " & cll(, 2)
            cll.Resize(1, 2).MergeCells = True
            cll = WorksheetFunction.Trim(tmp)
        Next cll
    End If
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
Viết tạm code thế này, bạn chỉnh lại cho phù hợp và tự gán phím tắt nhé. Tuy nhiên không nên Merge nhiều chỗ trong bảng tính, chỉ nên Merge để trình bày đẹp hơn (ví dụ ở vùng tiêu đề), không nên Merge trong vùng có dữ liệu cần tìm kiếm.
 
Lần chỉnh sửa cuối:
Cám ơn bạn .Mình cũng đang cần cái này . Nhưng dữ liệu của mình thì có nhiều dòng thì phải làm như thế nào . Bạn có thể giúp mình được không ? Cám ơn bạn rất nhiều
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn ơi mình có 2 ô dữ liệu ở hàng trên và hàng dưới liên tiếp nhau muốn gộp thành 1 ô thì sửa code trên ntn vậy -+*/
Mình thử dùng cái macro của bạn cho tr/h của mình nhưng nó lại thành 1 dòng **~**
 
các bạn cho mình hỏi là có cách nào để mình gọp dữ liệu ở 2 cột thành 1 mà không mất dữ liệu không za.&nbsp;<br>vd: A1= "giaiphap" và B1= "excel" thì gọp lại thành A1= "giaiphapexcel" luôn ấy.<br>và cái add in của bạn mình cài vào exl 2010 không được nó báo thế này&nbsp;<img src="http://www.giaiphapexcel.com/forum/attachment.php?attachmentid=135020&amp;stc=1" attachmentid="135020" alt="" id="vbattach_135020" class="previewthumb">
 

File đính kèm

  • Chưa có tên.png
    Chưa có tên.png
    39.3 KB · Đọc: 151
tks bác, cái này của bác tện quá

tks bác, cái này của bác tện quá
Mình vừa làm Add-in này dùng để Merge Cells mà không làm mất dữ liệu, dữ liệu mới sẽ là toàn bộ dữ liệu trong các Cell được Merge. Chỉ là đoạn Code đơn giản nhưng mình thấy nó có ích cho công việc của mình, xin chia sẻ với mọi người.

Chọn vùng dữ liệu cần Merge --> nhấn tổ hợp phím Ctrl Shift Z.

PHP:
Sub MrgCll()
    Dim Cll As Range, Temp As String
    On Error Resume Next
    If Selection.MergeCells = False Then
        For Each Cll In Selection
            If Cll <> "" Then Temp = Temp + Cll.Text + " "
        Next Cll
        Selection.Merge
        Selection.Value = Left(Temp, Len(Temp) - 1)
    Else
        Selection.UnMerge
    End If
     Selection.HorizontalAlignment = xlCenter
    Selection.VerticalAlignment = xlCenter
End Sub
 
Các bác cho em hỏi tí, chẳng hạn em muốn merge A1:B4 mà ô merge xong vẫn có thứ tự xuống hàng theo hàng ban đầu thì dùng phải làm sao ạ? Cảm ơn cá bác
 
Web KT

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

Back
Top Bottom