Nhờ giúp loại bỏ các tuổi trùng nhau trong Cell, và trả về Cell rút gọn kế bên. (1 người xem)

Người dùng đang xem chủ đề này

JETLI_VN

Thành viên mới
Tham gia
4/5/13
Bài viết
21
Được thích
1
Nghề nghiệp
Nhân viên kỹ thuật
Mình nhờ các bạn giúp mình với mục đích trong Excell như sau.

Bảng Excell gồm :
[TABLE="width: 568"]
[TR]
[TD="align: center"]Các tuổi tính toán
[/TD]
[TD="align: center"]Các tuổi tinh gọn lại
[/TD]
[/TR]
[TR]
[TD="align: center"]Tý, Tị, Ngọ ,Dần, Ngọ, Tị, Ngọ[/TD]
[TD="align: center"]Tý, Tị, Ngọ ,Dần[/TD]
[/TR]
[TR]
[TD="align: center"]Dần, Thìn, Thân, Dậu, Thân, Dần, Thân[/TD]
[TD="align: center"]Dần, Thìn, Thân, Dậu[/TD]
[/TR]
[/TABLE]

- Mục đích: mình muốn cột “Các tuổi tinh gọn lại” làm bằng công thức tự động, chứ không phải nhập tay như mình đã làm. Đây chỉ là kết quả loại bỏ các tuổi trùng lặp của cột đầu tiên

Cám ơn sự giúp đỡ nhiệt tình của các bạn!
Thân chào!
 

File đính kèm

Mình nhờ các bạn giúp mình với mục đích trong Excell như sau.

Bảng Excell gồm :
[TABLE="width: 568"]
[TR]
[TD="align: center"]Các tuổi tính toán
[/TD]
[TD="align: center"]Các tuổi tinh gọn lại
[/TD]
[/TR]
[TR]
[TD="align: center"]Tý, Tị, Ngọ ,Dần, Ngọ, Tị, Ngọ[/TD]
[TD="align: center"]Tý, Tị, Ngọ ,Dần[/TD]
[/TR]
[TR]
[TD="align: center"]Dần, Thìn, Thân, Dậu, Thân, Dần, Thân[/TD]
[TD="align: center"]Dần, Thìn, Thân, Dậu[/TD]
[/TR]
[/TABLE]

- Mục đích: mình muốn cột “Các tuổi tinh gọn lại” làm bằng công thức tự động, chứ không phải nhập tay như mình đã làm. Đây chỉ là kết quả loại bỏ các tuổi trùng lặp của cột đầu tiên

Cám ơn sự giúp đỡ nhiệt tình của các bạn!
Thân chào!
Thử với Function này.
Công thức ô B2 sẽ là =GPEX(A2)
PHP:
Public Function GPEX(Str As Range) As String
Dim Dic As Object, Teo, I As Long, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
Teo = Split(Str, ",")
For I = 0 To UBound(Teo)
    Tem = Trim(Teo(I))
    If Not Dic.Exists(Tem) Then
        Dic.Add Tem, ""
        GPEX = GPEX & Tem & ", "
    End If
Next I
GPEX = Left(GPEX, Len(GPEX) - 2)
Set Dic = Nothing
End Function
Chữ Hoa và chữ thường là khác nhau.
 
Upvote 0
Thêm 1 kiểu viết khác
PHP:
Function LOC(Str$) As String
Dim Tem, I&
Tem = Split(Str, ",")
With CreateObject("Scripting.Dictionary")
   For I = 0 To UBound(Tem)
      .Item(Trim(Tem(I))) = ""
   Next I
   LOC = Trim(Join(.keys, ", "))
End With
End Function
 
Upvote 0
Anh Ba với Hải chưa tính đến vụ này: Cell A2 có giá trị = "Tý, Tị, Ngọ ,Dần, NGỌ, Tị, ngọ" thì kết quả nó.. sao hen?
Ngoài ra em nghĩ trong hàm nên có đối số DẤU PHÂN CÁCH. Ai mà biết được có lúc người ta có nguồn = "A-A-B-C-C" thì lại mất công sửa tới sửa lui
Ẹc... Ẹc...
 
Lần chỉnh sửa cuối:
Upvote 0
Thêm 1 kiểu viết khác
PHP:
Function LOC(Str$) As String
Dim Tem, I&
Tem = Split(Str, ",")
With CreateObject("Scripting.Dictionary")
   For I = 0 To UBound(Tem)
      .Item(Trim(Tem(I))) = ""
   Next I
   LOC = Trim(Join(.keys, ", "))
End With
End Function

Lợi hại cái Join mà mình ít để ý à nghe.
Khỏi phải ghép vào từng Item rồi bỏ "cái đuôi".
PHP:
Public Function GPEX(Str As Range) As String
Dim Dic As Object, Teo, I As Long
Set Dic = CreateObject("Scripting.Dictionary")
Teo = Split(Str, ",")
For I = 0 To UBound(Teo)
    Dic.Item(Trim(Teo(I))) = ""
Next I
GPEX = Join(Dic.Keys, ", ")
Set Dic = Nothing
End Function
 
Upvote 0
Mình nhờ các bạn giúp mình với mục đích trong Excell như sau.

Bảng Excell gồm :
[TABLE="width: 568"]
[TR]
[TD="align: center"]Các tuổi tính toán
[/TD]
[TD="align: center"]Các tuổi tinh gọn lại
[/TD]
[/TR]
[TR]
[TD="align: center"]Tý, Tị, Ngọ ,Dần, Ngọ, Tị, Ngọ[/TD]
[TD="align: center"]Tý, Tị, Ngọ ,Dần[/TD]
[/TR]
[TR]
[TD="align: center"]Dần, Thìn, Thân, Dậu, Thân, Dần, Thân[/TD]
[TD="align: center"]Dần, Thìn, Thân, Dậu[/TD]
[/TR]
[/TABLE]

- Mục đích: mình muốn cột “Các tuổi tinh gọn lại” làm bằng công thức tự động, chứ không phải nhập tay như mình đã làm. Đây chỉ là kết quả loại bỏ các tuổi trùng lặp của cột đầu tiên

Cám ơn sự giúp đỡ nhiệt tình của các bạn!
Thân chào!
cái này chưa tính tới nhập dư khoảng trắng dấu"," sát hay liền kề nữa ... vì nhập tùy ý mà. thay vì mắc công code 1 đóng mà công dụng cũng không cao, bẫy lỗi nhập nhiều. Tại sao không sử dụng tách text, Copy paste special, Xóa trùng, Copy clipboar cũng thấy ok mà hihi
 
Lần chỉnh sửa cuối:
Upvote 0
Anh Ba với Hải chưa tính đến vụ này: Cell A2 có giá trị = "Tý, Tị, Ngọ ,Dần, NGỌ, Tị, ngọ" thì kết quả nó.. sao hen?
Ngoài ra em nghĩ trong hàm nên có đối số DẤU PHÂN CÁCH. Ai mà biết được có lúc người ta có nguồn = "A-A-B-C-C" thì lại mất công sửa tới sửa lui
Ẹc... Ẹc...
Đúng là nên có đối số và ông bảo vệ canh chừng cái vụ viết hoa viết thường tá lả
PHP:
Function LOC(Str, Delimiter) As String
Dim Tem, I&
Tem = Split(Str, Delimiter)
With CreateObject("Scripting.Dictionary")
   For I = 0 To UBound(Tem)
      .Item(Trim(Application.Proper(Tem(I)))) = ""
   Next I
   LOC = Trim(Join(.keys, Delimiter & Space(1)))
End With
End Function
 
Upvote 0
Đúng là nên có đối số và ông bảo vệ canh chừng cái vụ viết hoa viết thường tá lả
PHP:
Function LOC(Str, Delimiter) As String
Dim Tem, I&
Tem = Split(Str, Delimiter)
With CreateObject("Scripting.Dictionary")
   For I = 0 To UBound(Tem)
      .Item(Trim(Application.Proper(Tem(I)))) = ""
   Next I
   LOC = Trim(Join(.keys, Delimiter & Space(1)))
End With
End Function
Ủa, có cái vụ Application.Proper gì ở đây nữa ta? Cái này Excel 2003 nó không chịu đâu nha! Dùng LCase hoặc UCase thì còn được
Tuy nhiên, đã Scripting.Dictionary thì nên dùng cái này nó "chuyên nghiệp" hơn Hải à:
Mã:
With CreateObject("Scripting.Dictionary")
  [COLOR=#ff0000].CompareMode = vbTextCompare[/COLOR]
.....
End With
 
Upvote 0
Ủa, có cái vụ Application.Proper gì ở đây nữa ta? Cái này Excel 2003 nó không chịu đâu nha! Dùng LCase hoặc UCase thì còn được
Tuy nhiên, đã Scripting.Dictionary thì nên dùng cái này nó "chuyên nghiệp" hơn Hải à:
Mã:
With CreateObject("Scripting.Dictionary")
  [COLOR=#ff0000].CompareMode = vbTextCompare[/COLOR]
.....
End With
Nhưng nếu dùng CompareMode thì xuất kết quả ra hỏng có đẹp. Có thể có lộn xộn kiểu. Em không có biết cái vụ 2003 nó không chịu phương thức Proper. Mà giờ này ai còn xài 2003 thì ráng chịu đi. 2010 là ổn định và đủ công cụ để quậy tội gì không xài chứ.
 
Upvote 0
Nhưng nếu dùng CompareMode thì xuất kết quả ra hỏng có đẹp. Có thể có lộn xộn kiểu. Em không có biết cái vụ 2003 nó không chịu phương thức Proper. Mà giờ này ai còn xài 2003 thì ráng chịu đi. 2010 là ổn định và đủ công cụ để quậy tội gì không xài chứ.

Hổng phải là không chịu Proper mà kết quả nó trật lất thôi. Kể cả Excel 2007 cũng vẫn còn sai (mà số người dùng 2007 còn nhiều chứ)
Còn nói đến vụ ĐẸP thì ai biết sao là ĐẸP... Mình chỉ quan tâm code sao chuẩn và tổng quát là được
 
Upvote 0
Từ bài #2 "qua" có nói là:
Chữ Hoa và chữ thường là khác nhau.
Cũng đồng ý tranh luận để ra được cái đáp án "hoàn hảo".
Nhưng chuyện , ;- _ / \ hay dư khoảng trắng luxubu thì tác giả ráng chịu, mọi người "cầu toàn" khi tác giả chỉ hỏi "như dữ liệu" thì "bó chiếu"
Có chạy "trớt quớt" thì tự nhiên tác giả phải hỏi tiếp thôi mà. Có cần thiết phải "dự đoán" dùm tác giả không?
Chính tác giả còn chưa biết cái "yêu cầu đơn giản" của mình sẽ ra bao nhiêu cái kết quả mà.
Để tác giả tự "nghiền ngẫm" câu hỏi của mình thì sẽ ra "một đống" kinh nghiệm khi hỏi bài.
Híc, Ẹc..
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom