Tạo macro gộp tiêu đề của nhiều cell lại thành 1cell

Liên hệ QC

timhieu02

Thành viên hoạt động
Tham gia
30/9/09
Bài viết
114
Được thích
7
Giới tính
Nam
Em nhờ các anh chị làm dùm em 1 macro để gộp các tiêu đề bị nhảy qua cell khác.em gửi file đính kèm trước khi gộp lai và 1 file đính kèm sau khi đã gộp.giúp dùm em.
 

File đính kèm

  • FIDELE1.xlsx
    11.6 KB · Đọc: 23
Em nhờ các anh chị làm dùm em 1 macro để gộp các tiêu đề bị nhảy qua cell khác.em gửi file đính kèm trước khi gộp lai và 1 file đính kèm sau khi đã gộp.giúp dùm em.
Cái này đâu phải chỉ là gộp, có ô còn mất khoảng trống giữa hai chữ. Nếu tất cả các tiêu đề điều giống nhau thì tốt nhất thì tạo một cái tiêu đề mẫu và copy và dán vào.
 
Upvote 0
Nếu giống nhau thì đâu có khó.bởi vậy mình mới cần macro.Tại vì dữ liệu dài lắm,nên không copy dán được.
 
Upvote 0
Nếu giống nhau thì đâu có khó.bởi vậy mình mới cần macro.Tại vì dữ liệu dài lắm,nên không copy dán được.
Macro chỉ cho ra kết quả đúng nếu dữ liệu đồng nhất. Nếu các tiêu đề của bạn không giống nhau thì khó nhận biết chúng mà chạy macro được.
 
Upvote 0
Nếu giống nhau thì đâu có khó.bởi vậy mình mới cần macro.Tại vì dữ liệu dài lắm,nên không copy dán được.
Dữ liệu của bạn nếu bị cắt giữa 2 từ thì khi ghép lại sẽ bị mất khoảng trắng. Nếu muốn thêm khoản trắng vào thì chỉ có cách tìm bằng mắt và làm bằng tay, Macro không làm được.
 
Upvote 0
Không làm macro được ah.Dưới mỗi tiêu đề mình đều có ký tự bắt đầu là "*------"chỉ merge tiêu đề 2 cell lại thành 1.Không có cách nào ah.
 
Upvote 0
Không làm macro được ah.Dưới mỗi tiêu đề mình đều có ký tự bắt đầu là "*------"chỉ merge tiêu đề 2 cell lại thành 1.Không có cách nào ah.
Bạn xem nhé:
Trường hợp 1:
Ta có Location ghép lại ta được Location. Cái này đúng.
Trường hợp 2:
Ta có Types ofcustomers ghép lại ta được Types ofcustomers. Cái này thì không đúng, phải là Types of customers (theo như kết quả mẫu của bạn).

Khoảng trắng sẽ bị mất nếu nó nằm ngay chỗ bị cắt.
 
Upvote 0
Ah,mình lộn rồi phải là Types of customers.Vậy là bạn làm được phải không.Giúp mình nha.Thanks
 
Upvote 0
Vậy là không cách nào tạo macro ah.nếu macro chạy ra types ofcustomers thì cũng đựơc.Mình chỉ cần kiểm tra cái phần đầu tiên cái nào không đúng mình replace lại.
 
Upvote 0
Vậy là không cách nào tạo macro ah.nếu macro chạy ra types ofcustomers thì cũng đựơc.Mình chỉ cần kiểm tra cái phần đầu tiên cái nào không đúng mình replace lại.
Hình như bạn có nói là các tiêu đề không giống nhau.
Nếu giống nhau thì đâu có khó.bởi vậy mình mới cần macro.Tại vì dữ liệu dài lắm,nên không copy dán được.
Vậy không biết bạn sẽ Replace bằng cách nào???
 
Upvote 0
Nếu bạn chạy macro xong tất cả thì mình chỉ cần kiểm tra phần đầu (từng tiêu đề).Cái nào không đúng thì replace.
 
Upvote 0
Nếu bạn chạy macro xong tất cả thì mình chỉ cần kiểm tra phần đầu (từng tiêu đề).Cái nào không đúng thì replace.
Vậy bạn hãy thử với Macro này:
PHP:
Sub EditHeader()
Application.ScreenUpdating = False
Dim FirstCllAdd As String, FirstCll As Range, LastCll As Range, ACll As Range, Check As Boolean, Str As String
Set ACll = [A1]
FirstCllAdd = Cells.Find("~*------------------", ACll, xlFormulas, xlPart, xlByRows, xlNext).Address
Do
    Set FirstCll = Cells.FindNext(After:=ACll)
    Set ACll = FirstCll
    Set LastCll = FirstCll
    Str = ""
    If FirstCll.Address = FirstCllAdd Then Check = Not Check
    Do
        Str = Str & LastCll.Offset(-1).Value
        If LastCll.Value = "-------------------*" Or InStr(LastCll.Value, "------------------") = 0 Then Exit Do
        Set LastCll = LastCll.Offset(, 1)
    Loop
    With Range(FirstCll, LastCll).Offset(-1)
        .ClearContents
        .HorizontalAlignment = 7
    End With
    FirstCll.Offset(-1).Value = Str
Loop Until Not Check And FirstCll.Address = FirstCllAdd
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Thanks macro rất hay còn 1 vấn đề nhỏ thôi.Mình có thể merge các ô của từng tiêu đề lại với nhau được không?macro chạy ra tiêu đề vẫn nằm ở ô đầu tiên.
 
Upvote 0
Thanks macro rất hay còn 1 vấn đề nhỏ thôi.Mình có thể merge các ô của từng tiêu đề lại với nhau được không?macro chạy ra tiêu đề vẫn nằm ở ô đầu tiên.
Dù có Merge lại thì dữ liệu vẫn nằm ở ô đầu tiên thôi. Lúc đầu tôi đã cố ý định dạng kiểu Center Across Selection thay vì Merge. Hiệu ứng của hai cái này là như nhau nhưng Merge sẽ gây ra một số khó khăn khi xử lý dữ liệu.
Nếu muốn Merge thì bạn sửa lại theo code này.
PHP:
Sub EditHeader()
Application.ScreenUpdating = False
Dim FirstCllAdd As String, FirstCll As Range, LastCll As Range, ACll As Range, Check As Boolean, Str As String
Set ACll = [A1]
FirstCllAdd = Cells.Find("~*------------------", ACll, xlFormulas, xlPart, xlByRows, xlNext).Address
Do
    Set FirstCll = Cells.FindNext(After:=ACll)
    Set ACll = FirstCll
    Set LastCll = FirstCll
    Str = ""
    If FirstCll.Address = FirstCllAdd Then Check = Not Check
    Do
        Str = Str & LastCll.Offset(-1).Value
        If LastCll.Value = "-------------------*" Or InStr(LastCll.Value, "------------------") = 0 Then Exit Do
        Set LastCll = LastCll.Offset(, 1)
    Loop
    With Range(FirstCll, LastCll).Offset(-1)
        .ClearContents
        .Merge
        .HorizontalAlignment = xlCenter
    End With
    FirstCll.Offset(-1).Value = Str
Loop Until Not Check And FirstCll.Address = FirstCllAdd
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Không biết nói gì hơn nữa.Bạn quá giỏi,có thể cho mình xin số dtdd để sau này còn nhờ vã nữa,hjhj.
 
Upvote 0
Vậy bạn có thể cho mình mail để liên lạc với bạn được không.Mình không làm phiền hay có ý xấu gì đâu.
 
Upvote 0
Upvote 0
merge cell

Mình gặp phải 1 vấn đề khi chạy macro (lỗi 91).

mình gửi attach file bạn sữa lại code dùm.macro báo lỗi:

Sub EditHeader()
Application.ScreenUpdating = False
Dim FirstCllAdd
As String, FirstCll As Range, LastCll As Range, ACll As Range, Check As Boolean, Str As String
Set ACll
= [A1]
FirstCllAdd = Cells.Find("~*------------------", ACll, xlFormulas, xlPart, xlByRows, xlNext).Address
Do
Set FirstCll = Cells.FindNext(After:=ACll)
Set ACll = FirstCll
Set LastCll
= FirstCll
Str
= ""
If FirstCll.Address = FirstCllAdd Then Check = Not Check
Do
Str = Str & LastCll.Offset(-1).Value
If LastCll.Value = "-------------------*" Or InStr(LastCll.Value, "------------------") = 0 Then Exit Do
Set LastCll = LastCll.Offset(, 1)
Loop
With Range
(FirstCll, LastCll).Offset(-1)
.
ClearContents
.Merge
.HorizontalAlignment = xlCenter
End With
FirstCll
.Offset(-1).Value = Str
Loop Until Not Check
And FirstCll.Address = FirstCllAdd
Application
.ScreenUpdating = True
End Sub

file mình chạy macro:
City Gender
*------------------------------------------**---------------------------*
HCMCHa NoiDa NangMaleFemale

mình nghĩ nó bị lỗi chỗ City.
 

File đính kèm

  • BEAUT11B.xlsx
    9 KB · Đọc: 5
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom