Vấn đề cập nhật Danh Sách không trùng tên.

Liên hệ QC

Hoàng Trọng Nghĩa

Chuyên gia GPE
Thành viên BQT
Moderator
Tham gia
17/8/08
Bài viết
8,662
Được thích
16,720
Giới tính
Nam
Tôi có một Danh Sách có sẳn trong Sheet Nguồn, sau khi nhập tên vào Sheet Nhập liệu bằng Form, nếu Khách hàng mới (không có trong danh sách) thì thông báo.
Làm sao để nhận biết việc không trùng tên trong danh sách?
Kính nhờ các Thầy Cô, Anh Chị hướng dẫn.
Cám ơn rất nhiều ạ.
 
Lần chỉnh sửa cuối:
Tôi có một Danh Sách có sẳn trong Sheet Nguồn, sau khi nhập tên vào Sheet Nhập liệu bằng Form, nếu Khách hàng mới (không có trong danh sách) thì thông báo.
Làm sao để nhận biết việc không trùng tên trong danh sách?
Kính nhờ các Thầy Cô, Anh Chị hướng dẫn.
Cám ơn rất nhiều ạ.
Bạn thêm vào đoạn code sau trong code của bạn
PHP:
'Xin vui long viet tiep cho toi doan Code: "CboKhachHang.Value = "Ten da co trong DANH SACH""
Dim myRng As Range, endR As Long, TenKH As String
With Sheets("Nguon")
  endR = .Cells(65000, 1).End(xlUp).Row
  Set myRng = .Range(.Cells(2, 1), .Cells(endR, 1))
End With
TenKH = Trim(CboKhachHang.Value)
If WorksheetFunction.CountIf(myRng, TenKH) > 0 Then
  MsgBox "Ten da co trong DANH SACH"
    CboKhachHang = ""
    CboKhachHang.SetFocus
Else
 
Upvote 0
Bạn thêm vào đoạn code sau trong code của bạn
PHP:
'Xin vui long viet tiep cho toi doan Code: "CboKhachHang.Value = "Ten da co trong DANH SACH""
Dim myRng As Range, endR As Long, TenKH As String
With Sheets("Nguon")
  endR = .Cells(65000, 1).End(xlUp).Row
  Set myRng = .Range(.Cells(2, 1), .Cells(endR, 1))
End With
TenKH = Trim(CboKhachHang.Value)
If WorksheetFunction.CountIf(myRng, TenKH) > 0 Then
  MsgBox "Ten da co trong DANH SACH"
    CboKhachHang = ""
    CboKhachHang.SetFocus
Else

Cám ơn Thầy ThuNghi rất nhiều ạ. Nhờ đoạn Code của Thầy em đã làm được rồi.

Sẳn đây cho em hỏi về TRIM trong Excel và TRIM trong VBA, em cảm thấy rằng 2 hàm này hoàn toàn khác nhau khi ứng dụng. Nếu như TRIM trong Excel sẽ Trim tất cả phải, trái và giữa, thì TRIM trong VBA chỉ có Trim 2 bên phải và trái mà thôi. Vậy ta phải làm sao với TRIM trong VBA??

Bản thân em thì làm như vầy trong VBA: WorksheetFunction.Trim(), nhưng em chẳng hiểu sao lại khác biệt.
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn Thầy ThuNghi rất nhiều ạ. Nhờ đoạn Code của Thầy em đã làm được rồi.

Sẳn đây cho em hỏi về TRIM trong Excel và TRIM trong VBA, em cảm thấy rằng 2 hàm này hoàn toàn khác nhau khi ứng dụng. Nếu như TRIM trong Excel sẽ Trim tất cả phải, trái và giữa, thì TRIM trong VBA chỉ có Trim 2 bên phải và trái mà thôi. Vậy ta phải làm sao với TRIM trong VBA??

Bản thân em thì làm như vầy trong VBA: WorksheetFunction.Trim(), nhưng em chẳng hiểu sao lại khác biệt.
Dung thêm hàm replace, thay thế " " bằng " " sau đó trim thêm 1 lần.
Nghiên cứu thử code củ chuối sau.
PHP:
Sub ThayThe()
itext = " nnn   nnnn    nnnn "
dodai01 = Len(itext)
itext = Trim(itext)
dodai02 = Len(Trim(Replace(itext, "  ", " ")))
MsgBox dodai01 - dodai02
End Sub
 
Upvote 0
Dung thêm hàm replace, thay thế " " bằng " " sau đó trim thêm 1 lần.
Nghiên cứu thử code củ chuối sau.
PHP:
Sub ThayThe()
itext = " nnn   nnnn    nnnn "
dodai01 = Len(itext)
itext = Trim(itext)
dodai02 = Len(Trim(Replace(itext, "  ", " ")))
MsgBox dodai01 - dodai02
End Sub

Dạ, cám ơn Thầy, nhưng sao em làm WorksheetFunction.Trim(), nó vẫn hiểu tốt Thầy ơi. Nếu vậy thì mình đâu cần lồng thêm hàm LEN và REPLACE làm gì phải không thưa Thầy?
 
Upvote 0
Dung thêm hàm replace, thay thế " " bằng " " sau đó trim thêm 1 lần.
Nghiên cứu thử code củ chuối sau.
PHP:
Sub ThayThe()
itext = " nnn   nnnn    nnnn "
dodai01 = Len(itext)
itext = Trim(itext)
dodai02 = Len(Trim(Replace(itext, "  ", " ")))
MsgBox dodai01 - dodai02
End Sub
Cách này tôi thấy không ăn thua rồi
Ví dụ: Giữa 2 từ là 4 khoảng trắng, sau khi qua hàm Replace, kết quả vẫn còn lại 2 khoảng trắng (giữa 2 từ)
Tôi nghĩ nên dùng WorksheetFunction.Trim là chắc ăn nhất
 
Upvote 0
Đúng là mình quá máy móc, cám ơn MinhThien và Ndu nhiều. Cũng may là mình chưa dùng đến instr.
 
Upvote 0
Nhân đây tôi có 1 thắc mắc: Nếu lập trình trong Access (hoặc 1 môi trường khác Excel) mà không có WorksheetFunction.Trim thì làm thế nào nhỉ?
 
Upvote 0
Nhân đây tôi có 1 thắc mắc: Nếu lập trình trong Access (hoặc 1 môi trường khác Excel) mà không có WorksheetFunction.Trim thì làm thế nào nhỉ?
PHP:
Tên hàm:
Trim

Mô  tả:
Trim(string)
Cắt bỏ tất cả các kí tự trắng dư bên trái, bên  phải và ở giữa chuỗi string

Tham số:
String
Chuỗi cần  cắt

Ví dụ:
Option Explicit
Private Sub  Form_Load()
Dim MyString, TrimString
    MyString =  "  <-Trim->  "' Khoi tao
    TrimString = LTrim(MyString)' Returns = "<-Trim->   ".
    TrimString = RTrim(MyString)' Returns = "  <-Trim->".
    TrimString = LTrim(RTrim(MyString))'  Returns = "<-Trim->".
    TrimString = Trim(MyString)' Returns =  "<-Trim->".
End Sub
Hình như chỉ có Excel mới phải có WorksheetFunction, còn Access hay VB thì trim là [SIZE=-0]"Cắt bỏ tất cả các kí tự trắng dư bên trái, bên phải và ở giữa chuỗi string"
[/SIZE]
 
Upvote 0
PHP:
Tên hàm:
Trim

Mô  tả:
Trim(string)
Cắt bỏ tất cả các kí tự trắng dư bên trái, bên  phải và ở giữa chuỗi string

Tham số:
String
Chuỗi cần  cắt

Ví dụ:
Option Explicit
Private Sub  Form_Load()
Dim MyString, TrimString
    MyString =  "  <-Trim->  "' Khoi tao
    TrimString = LTrim(MyString)' Returns = "<-Trim->   ".
    TrimString = RTrim(MyString)' Returns = "  <-Trim->".
    TrimString = LTrim(RTrim(MyString))'  Returns = "<-Trim->".
    TrimString = Trim(MyString)' Returns =  "<-Trim->".
End Sub
Hình như chỉ có Excel mới phải có WorksheetFunction, còn Access hay VB thì trim là [SIZE=-0]"Cắt bỏ tất cả các kí tự trắng dư bên trái, bên phải và ở giữa chuỗi string"
[/SIZE]
ThuNghi ơi! Có lẽ tác giả viết nhầm thì phải
Theo tôi biết thì hàm TRIM này cho dù dùng trong môi trường nào thì nó vẫn chỉ cắt trái và phải mà thôi, không cắt giữa
Với các ứng dụng không phải Excel, nếu có nhu cầu 1 hàm TRIM như Excel, e rằng phải viết 1 UDF quá
 
Upvote 0
Sẳn Topic này em xin hỏi một vấn đề liên quan đến nhập tên.

Khi nhập liệu từ Form, em muốn tên Khách hàng sau khi nhập vào Sheet có sự thay đổi như sau:

Họ và tên viết thường hay viết hoa hay viết đầu có hoa..., Nếu không có dấu ngoặc thì toàn bộ chuyển thành chữ HOA, nếu có dấu ngoặc thì ngoài dấu ngoặc chuyển thành chữ HOA, trong ngoặc chỉ là chữ thường.

VD: HOÀNG TRỌNG NGHĨA (MINHTHIEN321), hoàng trọng nghĩa (MINHTHIEN321), Hoàng Trọng Nghĩa (minhthien321), HOÀNG TRỌNG NGHĨA (MinhThien321), ... đều trở thành:
HOÀNG TRỌNG NGHĨA (minhthien321)

KÍNH NHỜ CÁC THẦY CÔ, ANH CHỊ HƯỚNG DẪN.
 
Upvote 0
Sẳn Topic này em xin hỏi một vấn đề liên quan đến nhập tên.

Khi nhập liệu từ Form, em muốn tên Khách hàng sau khi nhập vào Sheet có sự thay đổi như sau:

Họ và tên viết thường hay viết hoa hay viết đầu có hoa..., Nếu không có dấu ngoặc thì toàn bộ chuyển thành chữ HOA, nếu có dấu ngoặc thì ngoài dấu ngoặc chuyển thành chữ HOA, trong ngoặc chỉ là chữ thường.

VD: HOÀNG TRỌNG NGHĨA (MINHTHIEN321), hoàng trọng nghĩa (MINHTHIEN321), Hoàng Trọng Nghĩa (minhthien321), HOÀNG TRỌNG NGHĨA (MinhThien321), ... đều trở thành:
HOÀNG TRỌNG NGHĨA (minhthien321)

KÍNH NHỜ CÁC THẦY CÔ, ANH CHỊ HƯỚNG DẪN.

Nếu dữ liệu của anh luôn có dạng : abc (def) thì có code sau, anh test lại nhé.

PHP:
Function Thay(St As String) As String
    Dim Tmp() As String
    Tmp = Split(St, "(")
    Thay = Replace(Replace(St, Tmp(1), LCase(Tmp(1))), Tmp(0), UCase(Tmp(0)))
End Function
 
Upvote 0
Nếu dữ liệu của anh luôn có dạng : abc (def) thì có code sau, anh test lại nhé.

PHP:
Function Thay(St As String) As String
    Dim Tmp() As String
    Tmp = Split(St, "(")
    Thay = Replace(Replace(St, Tmp(1), LCase(Tmp(1))), Tmp(0), UCase(Tmp(0)))
End Function

Đã kiểm tra và chạy tốt theo yêu cầu của mình trong trường hợp abc (def). Cảm ơn ptlong04x1 rất nhiều. Nhưng mình chỉ có 2 trường hợp thôi, hoặc là ABC(def) hoặc là ABC.
Trường hợp của bạn nếu chỉ có abc mà không có (def) thì sẽ bị lỗi, khắc phục dùm mình tí nhé (mình hơi ngáo ộp).
 
Upvote 0
mình chỉ có 2 trường hợp thôi, hoặc là ABC(def) hoặc là ABC.

Chỉnh lại cde chút thôi :

PHP:
Function Thay(St As String) As String
    Dim Tmp() As String
    If InStr(St, "(") Then
        Tmp = Split(St, "(")
        Thay = Replace(Replace(St, Tmp(0), _
               UCase(Tmp(0))), Tmp(1), LCase(Tmp(1)))
    Else: Thay = UCase(St)
    End If
End Function
 
Upvote 0
Chỉnh lại cde chút thôi :

PHP:
Function Thay(St As String) As String
    Dim Tmp() As String
    If InStr(St, "(") Then
        Tmp = Split(St, "(")
        Thay = Replace(Replace(St, Tmp(0), _
               UCase(Tmp(0))), Tmp(1), LCase(Tmp(1)))
    Else: Thay = UCase(St)
    End If
End Function
Tôi thì dùng & thay cho replace không bíêt có nhanh hơn.
PHP:
Function Thay(St As String) As String
    Dim Tmp() As String
    If InStr(St, ")") Then
      Tmp = Split(St, "(")
      Tmp(0) = UCase(WorksheetFunction.Trim(Tmp(0)))
      Tmp(1) = "(" & LCase(WorksheetFunction.Trim(Tmp(1)))
      Thay = Tmp(0) & " " & Tmp(1)
    Else
      Thay = UCase(WorksheetFunction.Trim(St))
    End If
End Function
 
Upvote 0
Thêm hàm Chữ Hoa Đầu (PROPER), trong trường hợp không dùng hàm LCase, tôi dùng hàm PCase, và nhận thấy rằng, hàm của Thầy ThuNghi hiểu được.

PHP:
Function PCase(Chuoi As String) As String
    Chuoi = " " & Application.WorksheetFunction.Trim(LCase(Chuoi))
    stt = Len(Chuoi)
    If stt > 1 Then
    Do
        stt = InStrRev(Chuoi, " ", stt)
        Mid(Chuoi, stt + 1, 1) = UCase(Mid(Chuoi, stt + 1, 1))
        stt = stt - 1
    Loop While stt > 0
        PCase = Mid(Chuoi, 2)
    End If
End Function

Function Thay2(St As String) As String
    Dim Tmp() As String
    If InStr(St, ")") Then
      Tmp = Split(St, "(")
      Tmp(0) = UCase(WorksheetFunction.Trim(Tmp(0)))
      Tmp(1) = "(" & PCase(WorksheetFunction.Trim(Tmp(1)))
      Thay2 = Tmp(0) & " " & Tmp(1)
    Else
      Thay2 = UCase(WorksheetFunction.Trim(St))
    End If
End Function
 
Upvote 0
Lại thêm một (hoặc nhiều) trường hợp về WorksheetFunction nữa các Thầy ơi. Thay vì em làm hàm tự tạo về PROPER (Hàm này lại không có trong VBA), em lại thử dùng WorksheetFunction. Thử trong Immediate, hàm này OK!
Mã:
?WorksheetFunction.Proper("anh yeu em nhieu tha thiet")
Anh Yeu Em Nhieu Tha Thiet

Như thế, em rút ra được một kinh nghiệm: Trước khi tạo hàm mới mà VBA không đáp ứng được, phải thử qua WorksheetFunction, nếu nó không chạy thì mình mới tạo, vừa đỡ mất thời gian lại hiệu quả!

Mã:
Function PCase2(St As String) As String
    PCase2 = WorksheetFunction.Proper(St)
End Function

Lại một kinh nghiệm nữa! Nó không chạy dấu có tiếng Việt bằng hàm tự tạo! Hic Hic

Mã:
?PCase2("THƯỞNG PHẠT")
ThưỞng PhẠt
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom