có cách nào ẩn chữ trong cell không nhỉ!

Liên hệ QC

ongtrungducmx25

Thành viên gạo cội
Tham gia
5/2/07
Bài viết
2,077
Được thích
1,987
Nghề nghiệp
GV
mình gõ vào cell A1=15a20215113 thì trong ô lúc này chỉ còn hiện ra là 15113 có cách nào ẩn đi thành phần của chuổi 15a202, có ai biết chỉ giùm em với, nhưng khi kiểm tra lại thì A1=15a20215113
 
Bạn cho biết nguyên tắc cũa dử liệu là thế nào? Nhập ngẩu nhiên? Hay lúc nào cũng là 15a20215113?
Với trường hợp thứ 2 thì có thễ dùng Custom Format.. còn như bạn nhập ngẫu nhiên thì tôi.. chưa nghĩ ra cách nào khác
Mến
ANH TUẤN
 
Upvote 0
nếu nhập có đuôi 15a20215113,15a20215114.......thì làm sao anhtuan chi em với nhé!
 
Upvote 0
Như bạn nói thì có vẽ như phần đầu 15a202 là ko thay đỗi, chỉ có phần đuôi là biến động... Vậy sao bạn ko làm ngược lại: Nhập vào 15113 ... 15114 ... nhưng lại hiện ra là 15a20215113 ... 15a20215114
Bạn thấy sao?
ANH TUẤN
 
Upvote 0
Có cách này mình vẫn thường làm mỗi khi định chính trong công thức . Tại Cell muốn ẩn thông tin ,ví dụ A1 : Bạn gõ
="15a202"&N15113
Enter
Kéo fill công thức xúông bạn sẽ có ="15a202"&N15114 .....v.v
Có thể dùng CTR+~ để hiển thị đầy đủ nội dung trong cells.
 
Upvote 0
vd: em gõ vào A1=NDTThanh Ngân thì A1=Mã Thanh Ngân,còn ở B1=NDT
em gõ vào A2=NTNguyễn Anh Kiệt thì A2=Nguyễn Anh Kiệt,còn ở B2=NT
em gõ vào A3=NCao Thái Sơn thì A3=Cao Thái Sơn,còn ở B3=N
được không nhỉ.
 
Lần chỉnh sửa cuối:
Upvote 0
vd: em gõ vào A1=NDTThanh Ngân thì A1=Mã Thanh Ngân,còn ở B1=NDT
em gõ vào A2=NTNguyễn Anh Kiệt thì A2=Nguyễn Anh Kiệt,còn ở B2=NT
em gõ vào A3=NCao Thái Sơn thì A3=Cao Thái Sơn,còn ở B3=N
được không nhỉ.
Làm cái này thì ko có vấn đề... nhưng khi tách xong thì cái nào ra cái đó.. tức là khi A2 = Nguyễn Anh Kiệt thì nó sẽ như thế chứ ko có cái vụ click chuột vào thì hiện ra NT Nguyễn Anh Kiệt đâu nha!
Bạn đồng ý thì tôi sẽ làm thử

Đầu tiên bạn Define name cho vùng cần tách là DS (ví dụ từ A5:A100)
Sau khi đã có dử liệu trong vùng này thì chạy code:
PHP:
Sub TACH()
   Dim Er As Integer
   Dim Tach1 As String, Tach2 As String
   Dim Clls As Range
   On Error Resume Next
   For Each Clls In Range("DS")
     If Clls = "" Then
        Cells(Clls.Row, 2) = ""
     Else:
        VT = Application.WorksheetFunction.Find(" ", Clls, 1)
        Tach1 = Right(Clls, Len(Clls) - VT)
        Tach2 = Left(Clls, VT - 1)
        Clls.Value = Tach1
        Cells(Clls.Row, 2).Value = Tach2
     End If
   Next
End Sub
Thử test kỹ lại lần nữa... Tôi cũng đã test nhưng chưa phát hiện lỗi.


Tôi quên nữa...
Bạn sữa lại trong code, chổ nào là
Cells(Clls.Row, 2)
thì sữa thành
Cells(Clls.Row, Clls.Column +1)
Như vậy sẽ tổng quát hơn
Cụ thể là
PHP:
Sub TACH()
   Dim Er As Integer
   Dim Tach1 As String, Tach2 As String
   Dim Clls As Range
   On Error Resume Next
   For Each Clls In Range("DS")
     If Clls = "" Then
        Cells(Clls.Row, Clls.Column + 1) = ""
     Else:
        VT = Application.WorksheetFunction.Find(" ", Clls, 1)
        Tach1 = Right(Clls, Len(Clls) - VT)
        Tach2 = Left(Clls, VT - 1)
        Clls.Value = Tach1
        Cells(Clls.Row, Clls.Column + 1).Value = Tach2
     End If
   Next
End Sub
Mai này bạn có thể đặt vùng nhập liệu bất cứ đâu (miễn sao Define name nó tên là DS) thì mã sẽ dc tách ra nằm ở cột cạnh bên

Mến
ANH TUẤN
 

File đính kèm

Upvote 0
Vấn đề tách chuỗi đã được bàn rất nhiều trên diễn đàn. Các bạn đã có nhiều cách làm khác nhau. Trong trường hợp này, mình xin góp 1 cách cho vui:
Mã:
Sub TACH()
Dim Clls As Range
Dim Kq() As String
On Error Resume Next
   For Each Clls In Range("DS")
          If Clls <> "" Then
              Kq = Split(Clls, " ")
              Clls.Offset(0, 1).Value = Kq(0)
              Clls.Value = Trim(Replace(Clls, Kq(0), ""))
         End If
   Next
End Sub
 
Upvote 0
Oh... sao mình lại đặt điều kiện ngu thế nhỉ?
Thay vì Clls = ""
Thầy Voda sữa lại thành Clls <>"" là hoàn chỉnh nhất
Thầy cho hỏi: Em thấy On Error Resume Next ko hay cho lắm nhưng ko biết đặt điều kiện gì đễ bõ nó...
Cảm ơn thầy
ANH TUẤN
 
Upvote 0
Theo mình hiểu, On Error Resume Next là một cách để bẩy lỗi. Khi lỗi xảy ra, VBA sẽ cho qua, không báo lỗi bằng 1 thông báo gây khó chịu. Nếu không muốn điều này, ta bỏ dòng lệnh đó đi mà không cần phải đặt điều kiện gì cả. Trong đoạn code của bạn, khả năng xảy ra lỗi rất ít, nên có thể không dùng bẩy lỗi.
 
Upvote 0
File cũa em bị lỗi khi chuỗi ko có khoãng trắng.. lỗi tại dòng:
VT = Application.WorksheetFunction.Find(" ", Clls, 1)
Nếu là công thức thì em biết nên dùng cái gì đễ bẩy... còn trong VBA thì lại bó tay nên đành gài em On Error Resume Next vào
Nói chung là khi đã biết rõ ràng cái lỗi ấy là gì thì em lại ko thích xài On Error Resume Next ... Thầy giúp em sữa code với.. sữa sao miễn bõ dc câu bẩy lỗi này...
Cảm ơn thầy
ANH TUẤN
 
Upvote 0
]Anhtuan test thử đoạn code này, xem có trường hợp nào báo lỗi nữa không:
Mã:
Sub TACH()
   Dim Tach1 As String, Tach2 As String
   Dim Clls As Range
For Each Clls In Range("DS")
     If Clls <> "" And InStr(Clls, " ") > 0 Then
        Tach1 = Right(Clls, Len(Clls) - InStr(Clls, " "))
        Tach2 = Left(Clls, InStr(Clls, " ") - 1)
        Clls.Value = Tach1
        Clls.Offset(0, 1).Value = Tach2
     End If
   Next
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
em có thể tách nó ở bất kì cột nào thì phải làm sau đây! trường hợp trên là ở cột B:B còn em muốn thay đổi ở cột khác sao nhỉ vd:cột Range(Z:Z)
em sửa lại như zậy thì không thấy báo lỗi không biết có lỗi gì không zay
PHP:
 Cells(Clls.Row, 26).Value = Tach2
 
Lần chỉnh sửa cuối:
Upvote 0
voda đã viết:
]Anhtuan test thử đoạn code này, xem có trường hợp nào báo lỗi nữa không:
Oh... hay quá.. thì ra là InStr đễ tìm " " trong Clls...
Hôm nay lại biết thêm 1 ít...
Thầy cho hỏi cái InStr có phải là giống với FIND trong công thức Excel ko nhỉ?
Cảm ơn thầy Voda nhiều...
ANH TUẤN
 
Upvote 0
-Theo mình biết, cả 2 đều có chức năng tìm kiếm nhưng hàm FIND của Excel có 3 đối số. Hàm InStr trong VBA có 4 đối số:
InStr([start,]string1,string2[,compare])
-Trong VBA không có hàm FIND chỉ có method FIND
 
Upvote 0
nếu làm ngược lại em gõ vào Nguyễn Anh Kiệt NDT thì có được không zây lúc đó phải khai báo ra sau!
 
Upvote 0
-Nếu bạn gõ Nguyễn Anh Kiệt NDT, phải chỉnh lại code như sau:
Mã:
Sub TACH()
   Dim Tach1 As String, Tach2 As String
   Dim Clls As Range
For Each Clls In Range("DS")
     If Clls <> "" And InStrRev(Clls, " ") > 0 Then
        Tach1 = Right(Clls, Len(Clls) - InStrRev(Clls, " "))
        Tach2 = Left(Clls, InStrRev(Clls, " ") - 1)
        Clls.Value = Tach2
        Clls.Offset(0, 1).Value = Tach1
     End If
   Next
End Sub
 
Upvote 0
voda đã viết:
-Nếu bạn gõ Nguyễn Anh Kiệt NDT, phải chỉnh lại code như sau:
Mã:
Sub TACH()
   Dim Tach1 As String, Tach2 As String
   Dim Clls As Range
For Each Clls In Range("DS")
     If Clls <> "" And InStrRev(Clls, " ") > 0 Then
        Tach1 = Right(Clls, Len(Clls) - InStrRev(Clls, " "))
        Tach2 = Left(Clls, InStrRev(Clls, " ") - 1)
        Clls.Value = Tach2
        Clls.Offset(0, 1).Value = Tach1
     End If
   Next
End Sub

Góp ý Sửa 1 chút cho xum tụ
thêm biến kS cho ngắn gọn và nhanh hơn
PHP:
Sub TACH()
   Dim Tach1 As String, Tach2 As String
   Dim Clls As Range, kS As Integer
   For Each Clls In Range("DS")
     kS=InStrRev(Clls, " ")
     If Clls <> "" And kS > 0 Then
        Tach1 = Right(Clls, Len(Clls) - kS)
        Tach2 = Left(Clls, kS - 1)
        Clls.Value = Tach2
        Clls.Offset(0, 1).Value = Tach1
     End If
   Next
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom