Masu1991
Thành viên hoạt động
- Tham gia
- 21/3/20
- Bài viết
- 110
- Được thích
- 14
Nếu muốn tìm thì cứ tìm tự nhiên thôi bạn.xin chào mọi người,
mình có 1 cái tên viết không dấu, mình muốn tìm tất cả các tên trong tiếng việt có đầu đủ dấu để thành 1 cái tên có nghĩa:
MẪU TÊN: THANH DAO 1Thanh Đao 2Thanh Đào 3Thánh Dao 4Thạnh Đạo 5Thảnh Dao 6…. 7 8 9 10 11 12 13
72 cái tên ấy bạn tìm chứ có phải thớt tìm đâu. Người ta chỉ "sáng kiến" thôi. Được rồi làm cái gì tính sau.Có 6 dấu thanh kể cả không dấu. Có D, Đ, tức 2 khả năng từ D. Vậy từ DAO có 6*2 = 12 từ khác nhau. Từ THANH có 6 từ khác nhau.. Từ THANH DAO có 6*12 = 72 tên khác nhau. Tạo 72 tên để làm cái gì? Để giải buồn?
...
từ một trò chơi đoán tên của một người bạn, e muốn tìm tất cả tên trên excel xem thế nào á anh.Nếu muốn tìm thì cứ tìm tự nhiên thôi bạn.
vậy có cách nào để tìm ra tất cả các trường hợp để tạo thành 1 từ hay 1 cụm từ họ tên có nghĩa bằng excel không anh.Có 6 dấu thanh kể cả không dấu. Có D, Đ, tức 2 khả năng từ D. Vậy từ DAO có 6*2 = 12 từ khác nhau. Từ THANH có 6 từ khác nhau.. Từ THANH DAO có 6*12 = 72 tên khác nhau. Tạo 72 tên để làm cái gì? Để giải buồn?
Nếu là DON thì từ O có O, Ơ, Ô, tức 3 khả năng, nên từ DON có 6*2*3 = 36 từ. Từ THANH DON có 6*36 = 216 tên khác nhau.
Nếu có bài toán khác: Có trong CSDL 1000 tên nhân viên của công ty. Có một bản ghi gì đó mà người ta viết tên không có dấu. Hãy tìm xem tên được ghi khớp với những tên nào trong CSDL.
Bài toán trên thực tế hơn, và cách giải qyết cũng khác, và đơn giản hơn. Code sẽ tạo 1000 tên không dấu từ 1000 tên trong CSDL. Sau đó tìm tên cho trước từ 1000 tên không dấu. Tìm thấy ở những vị trí nào thì đọc từ gốc tên có dấu. Thế thôi.
Không có cách nào tìm từ họ tên "có nghĩa" vì họ tên nhiều khi được đặt "không có nghĩa thông thường"từ một trò chơi đoán tên của một người bạn, e muốn tìm tất cả tên trên excel xem thế nào á anh.
Bài đã được tự động gộp:
vậy có cách nào để tìm ra tất cả các trường hợp để tạo thành 1 từ hay 1 cụm từ họ tên có nghĩa bằng excel không anh.
'Đặt Option Compare Text trên đầu Component (Module, Class Module, Code Form)
Option Compare Text
Function StandardText(ByVal Text$) As String
Dim z&, t$, s$, k&
Static a$, e$, i$, o$, u$, y$, d$
If a = vbNullString Then
a = "[a" & ChrW(224) & ChrW(225) & ChrW(226) & ChrW(227) & ChrW(259) & ChrW(7841) & ChrW(7843) & ChrW(7845) & ChrW(7847) & ChrW(7849) & ChrW(7851) & ChrW(7853) & ChrW(7855) & ChrW(7857) & ChrW(7859) & ChrW(7861) & ChrW(7863)
e = "[e" & ChrW(232) & ChrW(233) & ChrW(234) & ChrW(7865) & ChrW(7867) & ChrW(7869) & ChrW(7871) & ChrW(7873) & ChrW(7875) & ChrW(7877) & ChrW(7879)
i = "[i" & ChrW(236) & ChrW(237) & ChrW(297) & ChrW(7881) & ChrW(7883)
o = "[o" & ChrW(242) & ChrW(243) & ChrW(244) & ChrW(245) & ChrW(417) & ChrW(7885) & ChrW(7887) & ChrW(7889) & ChrW(7891) & ChrW(7893) & ChrW(7895) & ChrW(7897) & ChrW(7899) & ChrW(7901) & ChrW(7903) & ChrW(7905) & ChrW(7907)
u = "[u" & ChrW(249) & ChrW(250) & ChrW(361) & ChrW(432) & ChrW(7909) & ChrW(7911) & ChrW(7913) & ChrW(7915) & ChrW(7917) & ChrW(7919) & ChrW(7921)
y = "[y" & ChrW(253) & ChrW(7923) & ChrW(7925) & ChrW(7927) & ChrW(7929)
d = "[d" & ChrW(273)
If "a" <> "A" Then
a = a & "A" & ChrW(65) & ChrW(192) & ChrW(193) & ChrW(194) & ChrW(195) & ChrW(258) & ChrW(7840) & ChrW(7842) & ChrW(7844) & ChrW(7846) & ChrW(7848) & ChrW(7850) & ChrW(7852) & ChrW(7854) & ChrW(7856) & ChrW(7858) & ChrW(7860) & ChrW(7862)
e = e & "E" & ChrW(200) & ChrW(201) & ChrW(202) & ChrW(7864) & ChrW(7866) & ChrW(7868) & ChrW(7870) & ChrW(7872) & ChrW(7874) & ChrW(7876) & ChrW(7878)
i = i & "I" & ChrW(204) & ChrW(205) & ChrW(296) & ChrW(7880) & ChrW(7882)
o = o & "O" & ChrW(210) & ChrW(211) & ChrW(212) & ChrW(213) & ChrW(416) & ChrW(7884) & ChrW(7886) & ChrW(7888) & ChrW(7890) & ChrW(7892) & ChrW(7894) & ChrW(7896) & ChrW(7898) & ChrW(7900) & ChrW(7902) & ChrW(7904) & ChrW(7906)
u = u & "U" & ChrW(217) & ChrW(218) & ChrW(360) & ChrW(431) & ChrW(7908) & ChrW(7910) & ChrW(7912) & ChrW(7914) & ChrW(7916) & ChrW(7918) & ChrW(7920)
y = y & "Y" & ChrW(221) & ChrW(7922) & ChrW(7924) & ChrW(7926) & ChrW(7928)
d = d & "D" & ChrW(272)
End If
a = a & "]": e = e & "]": i = i & "]": o = o & "]": u = u & "]": y = y & "]": d = d & "]"
End If
For k = 1 To Len(Text)
t = VBA.Strings.Mid$(Text, k, 1): z = AscW(t)
Select Case z
Case 97, 224, 225, 226, 227, 259, 7841, 7843, 7845, 7847, 7849, 7851, 7853, 7855, 7857, 7859, 7861, 7863, 65, 192, 193, 194, 195, 258, 7840, 7842, 7844, 7846, 7848, 7850, 7852, 7854, 7856, 7858, 7860, 7862:
s = s & a
Case 101, 232, 233, 234, 7865, 7867, 7869, 7871, 7873, 7875, 7877, 7879, 69, 200, 201, 202, 7864, 7866, 7868, 7870, 7872, 7874, 7876, 7878:
s = s & e
Case 105, 236, 237, 297, 7881, 7883, 73, 204, 205, 296, 7880, 7882:
s = s & i
Case 111, 242, 243, 244, 245, 417, 7885, 7887, 7889, 7891, 7893, 7895, 7897, 7899, 7901, 7903, 7905, 7907, 79, 210, 211, 212, 213, 416, 7884, 7886, 7888, 7890, 7892, 7894, 7896, 7898, 7900, 7902, 7904, 7906
s = s & o
Case 117, 249, 250, 361, 432, 7909, 7911, 7913, 7915, 7917, 7919, 7921, 85, 217, 218, 360, 431, 7908, 7910, 7912, 7914, 7916, 7918, 7920:
s = s & u
Case 121, 253, 7923, 7925, 7927, 7929, 89, 221, 7922, 7924, 7926, 7928
s = s & y
Case 68, 272, 100, 273:
s = s & d
Case 91, 93, 42, 63, 35:
s = s & "[" & t & "]"
Case Else:
If LCase(t) <> UCase(t) Then
s = s & "[" & LCase(t) & UCase(t) & "]"
Else
s = s & t
End If
End Select
Next
StandardText = s
End Function
Function StandardText(ByVal Text$) As String
Dim t$, s$, k&
Static a$, e$, i$, o$, u$, y$, d$
If a = vbNullString Then
a = "[a" & ChrW(224) & ChrW(225) & ChrW(226) & ChrW(227) & ChrW(259) & ChrW(7841) & ChrW(7843) & ChrW(7845) & ChrW(7847) & ChrW(7849) & ChrW(7851) & ChrW(7853) & ChrW(7855) & ChrW(7857) & ChrW(7859) & ChrW(7861) & ChrW(7863)
e = "[e" & ChrW(232) & ChrW(233) & ChrW(234) & ChrW(7865) & ChrW(7867) & ChrW(7869) & ChrW(7871) & ChrW(7873) & ChrW(7875) & ChrW(7877) & ChrW(7879)
i = "[i" & ChrW(236) & ChrW(237) & ChrW(297) & ChrW(7881) & ChrW(7883)
o = "[o" & ChrW(242) & ChrW(243) & ChrW(244) & ChrW(245) & ChrW(417) & ChrW(7885) & ChrW(7887) & ChrW(7889) & ChrW(7891) & ChrW(7893) & ChrW(7895) & ChrW(7897) & ChrW(7899) & ChrW(7901) & ChrW(7903) & ChrW(7905) & ChrW(7907)
u = "[u" & ChrW(249) & ChrW(250) & ChrW(361) & ChrW(432) & ChrW(7909) & ChrW(7911) & ChrW(7913) & ChrW(7915) & ChrW(7917) & ChrW(7919) & ChrW(7921)
y = "[y" & ChrW(253) & ChrW(7923) & ChrW(7925) & ChrW(7927) & ChrW(7929)
d = "[d" & ChrW(273)
If "a" <> "A" Then
a = a & "A" & ChrW(65) & ChrW(192) & ChrW(193) & ChrW(194) & ChrW(195) & ChrW(258) & ChrW(7840) & ChrW(7842) & ChrW(7844) & ChrW(7846) & ChrW(7848) & ChrW(7850) & ChrW(7852) & ChrW(7854) & ChrW(7856) & ChrW(7858) & ChrW(7860) & ChrW(7862)
e = e & "E" & ChrW(200) & ChrW(201) & ChrW(202) & ChrW(7864) & ChrW(7866) & ChrW(7868) & ChrW(7870) & ChrW(7872) & ChrW(7874) & ChrW(7876) & ChrW(7878)
i = i & "I" & ChrW(204) & ChrW(205) & ChrW(296) & ChrW(7880) & ChrW(7882)
o = o & "O" & ChrW(210) & ChrW(211) & ChrW(212) & ChrW(213) & ChrW(416) & ChrW(7884) & ChrW(7886) & ChrW(7888) & ChrW(7890) & ChrW(7892) & ChrW(7894) & ChrW(7896) & ChrW(7898) & ChrW(7900) & ChrW(7902) & ChrW(7904) & ChrW(7906)
u = u & "U" & ChrW(217) & ChrW(218) & ChrW(360) & ChrW(431) & ChrW(7908) & ChrW(7910) & ChrW(7912) & ChrW(7914) & ChrW(7916) & ChrW(7918) & ChrW(7920)
y = y & "Y" & ChrW(221) & ChrW(7922) & ChrW(7924) & ChrW(7926) & ChrW(7928)
d = d & "D" & ChrW(272)
End If
a = a & "]": e = e & "]": i = i & "]": o = o & "]": u = u & "]": y = y & "]": d = d & "]"
End If
For k = 1 To Len(Text)
t = VBA.Strings.Mid$(Text, k, 1)
Select Case True
Case t Like a: s = s & a
Case t Like e: s = s & e
Case t Like i: s = s & i
Case t Like o: s = s & o
Case t Like u: s = s & u
Case t Like y: s = s & y
Case t Like d: s = s & d
Case t Like "[]]", t Like "[[#*?]": s = s & "[" & t & "]"
Case Else:
If LCase(t) <> UCase(t) Then
s = s & "[" & LCase(t) & UCase(t) & "]"
Else
s = s & t
End If
End Select
Next
StandardText = s
End Function
1. Đây có lẽ là code có tham vọng giải bài toán của tôi. Tức có các tên trong CSDL (vd. Thanh Đạo) và cần phải kiểm tra xem chúng có khớp với tên không dấu cho trước (Thanh Dao) hay không@Masu1991
Bạn dùng toán tử Like trong VBA, với cú pháp chứa các ký tự Unicode tiếng Việt
Hoặc Unicode trong Regular Expession, với bảng mã Unicode tiếng Việt
Hoặc Like trong SQL
Ví dụ dưới đây dành cho bảng mã Unicode Dựng sẵn:
"Thanh Đạo" Like "th[aáàãảạ]nh [đd][aáàãảạ]o"
Sử dụng tùy chọn Option Compare Text để so sánh không phân biệt hoa thường
Không có chỗ nào tôi nói là khó.Giải bài này cũng đơn giản, nếu chịu khó, và có quyết tâm.