Tách tên TỈNH từ địa chỉ có sẳn (1 người xem)

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

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,913
Trong file đính kèm, cột A là ĐỊA CHỈ.. giờ nhờ các bạn góp ý dùng công thức gì đễ tách ra tên TỈNH sang cột B (Danh sách tỉnh nằm ở sheet TINH và đã dc đặt name là DMT)
Mến
ANH TUẤN
 
Lần chỉnh sửa cuối:
anhtuan1066 đã viết:
Trong file đính kèm, cột A là ĐỊA CHỈ.. giờ nhờ các bạn góp ý dùng công thức gì đễ tách ra tên TỈNH sang cột B (Danh sách tỉnh nằm ở sheet TINH và đã dc đặt name là DMT)
Mến
ANH TUẤN

Các bước có thể như sau :
  1. Bỏ , VietNam cuối cùng đi
  2. tách lấy tỉnh giống như TH tách tên không dùng VBA
Còn nếu không thì dùng 1 UFD thì thoải mái hơn.

Thân!
 
Ông Tía ơi, cho hỏi ngoài lề một chút.
Thấy trên 4R hay dùng chữ UFD, nó là cái gì vậy?
 
Em dùng VBA nhé, chưa làm bài nào dữ liệu lớn đến vậy, nếu bác lập công thức mà kéo xuống 11547 dòng thì cũng vất vả đấy.
 

File đính kèm

Quên... ko làm bằng VBA nha! Tôi nghĩ công thức rất đơn giản đấy
Với BNTT: UDF nghĩa là User Defined Function (hàm tự tạo)
---------------------------------
Xin các bạn lưu ý cho 1 điểm khác nhau giữa bài toàn này với việc tách họ tên, đó là: Bài này có sẳn 1 danh sách các tên tỉnh.. Vì thế mà phải bám vào danh sách này là chính... Có thể sẽ có vấn đề về SAI CHÍNH TẢ và cách gọi tên ko thống nhất, ví dụ như: TP HỒ CHÍ MINH với TP HCM, Bắc Kạn với Bắc Cạn, KonTom với Kom Tum ... vân vân và 1 vài chi tiết nhỏ khác... điều này có thể chỉnh sửa sau... Mục đích cuối cùng vẫn là THUẬT TOÁN
ANH TUẤN
 
Lần chỉnh sửa cuối:
anhtuan1066 đã viết:
Quên... ko làm bằng VBA nha! Tôi nghĩ công thức rất đơn giản đấy
Với BNTT: UDF nghĩa là User Defined Function (hàm tự tạo)
ANH TUẤN
Đây là câu hỏi hay câu đố vậy.
Mr Okebab đã trả lời rồi.
Bạn có đáp án hay thì gởi luôn đi.
Xem lại thấy cũng có cái hay của nó. Tách làm sao chỉ có DMT thỏa DK
Cám ơn!
 
Lần chỉnh sửa cuối:
Tất nhiên tôi đã có đáp án nên mới nói là công thức đơn giản... Tuy nhiên tôi vẫn muốn nghe thêm ý kiến của các bạn... Biết đâu có cách hay hơn...
Tôi dùng hàm FIND hoặc SEARCH, tiếp theo là INDEX, MATCH.. chỉ vậy thôi, công thức rất ngắn!
Còn về file macro của bạn gì đó, theo tôi nhận xét là bạn ấy dựa vào dấu "," đễ phân biệt tên tình... Thuật toán này ko ổn đâu, vì có thể người ta viết địa chỉ theo kiểu Xã... -Tỉnh Đồng Nai (dùng dấu "-") thì kết quả sẽ sai ngay lập tức...
Tóm lại, cách làm của tôi là dò tìm trong chuổi, nếu thấy trùng với em nào trong danh sách chuẩn thì lôi cổ hắn ra
Về chuyện dử liệu nhiều có thể làm tăng dung lượng khi tạo công thức thì ta ko lo, vì khi tạo xong công thức, kiểm tra nếu kết quả ko sai thì ta copy, paste value là xong (xóa luôn công thức)
Mong các bạn góp ý thêm... Cái này ko phải là đố đâu ThuNghi ơi..
ANH TUẤN
 
Em làm được rồi, nhưng mà công thức nó dài khủng khiếp.
Ví dụ, chỉ để lấy chữ cuối cùng của tên tỉnh ("Nội" trong "Hà Nội") thôi, thì nó đã như thế này:
PHP:
=IF(ISERR(FIND(" ",LEFT(A2,LEN(A2)-10))),LEFT(A2,LEN(A2)-10), RIGHT(LEFT(A2,LEN(A2)-10), LEN(LEFT(A2,LEN(A2)-10))-FIND("*", SUBSTITUTE(LEFT(A2,LEN(A2)-10)," ","*",LEN(LEFT(A2,LEN(A2)-10))-LEN(SUBSTITUTE(LEFT(A2,LEN(A2)-10)," ",""))))))
Thấy bác nói
công thức rất ngắn, nên mắc cỡ quá, hổng dám trả lời nữa (!)
Thôi bác đừng đố tụi em nữa, gửi bài giải lên cho tụi em tham khảo với. Cảm ơn nhìu nhìu.
 
Lần chỉnh sửa cuối:
nếu thích tách thôi, ko phụ thuộc DTM thì công thức sau đơn giản

=IF(TRIM($A2)="","",MID(TRIM($A2),FIND("#",SUBSTITUTE(TRIM($A2),",","#",LEN(TRIM($A2))-1-LEN(SUBSTITUTE(TRIM($A2),",",""))))+2,FIND("#",SUBSTITUTE(TRIM($A2),",","#",LEN(TRIM($A2))-LEN(SUBSTITUTE(TRIM($A2),",",""))))-2-FIND("#",SUBSTITUTE(TRIM($A2),",","#",LEN(TRIM($A2))-1-LEN(SUBSTITUTE(TRIM($A2),",",""))))))

anhtuan..... có vẻ thích đưa câu đố nhỉ, nhưng lần sau bạn đề bài bác nên chi tiết và chặt hơn 1 chút ví dụ: đề trên bạn phải nói rõ hạn chế VBA, đặt tình huống chỉ dựa vào danh sách DMT đã có. để a e đỡ mất thời gian nhỉ

Nhưng dù sao, cũng rất cám ơn anhtuan... hay đưa ra những chủ đề hay, thanks one more! hic
 
Chỉnh sửa lần cuối bởi điều hành viên:
hy vọng cách tiếp theo sẽ phù hợp ý kiến a tuấn đó là,

+ đặt 1 name timk =IF(ISNUMBER(FIND(DMT,DATA!$A2)),1,0)
+ công thức tại B2 là: =INDEX(DMT,MATCH(1,timk,0))

thế là OK,

nhưng có nhược điểm là:
- nếu trong data mà có ô A2652: "925/24/2 Lê Hồng Phong Phú Thọ TDM, Bình Dương, Việt Nam" -> lúc này kết quả trả về là tỉnh Phú Thọ ....... ko phải Bình Dương

xử lý vấn đề này chắc ko khó - nhưng phải xét thêm dấu phẩy "," không như theo ý atuan....... hic

- vấn đề nữa nếu tỉnh viết tắt (như TP HCM) ko có trong danh sách -> kết quả là 0 ....... -> suy ra cần thêm cả tên viết tắt vào DMT

Vậy mong các thành viên góp ý nhé

Ah, atuan... cái này ứng dụng vào các Vấn đề thực tế nào nhỉ ...... chắc không chỉ tách thế này thôi, a liệt kê ra cho các TV lần sau gặp ứng dụng luôn, thanks


 
Lần chỉnh sửa cuối:
Cảm ơn Tigertiger góp ý, tại quên thôi... hi.. hi... Rút kinh nghiệm... Nhưng các bạn cũng đễ ý thấy, nếu tôi muốn làm bằng VBA thì đã ko đưa bài này vào mục "Excel và các công thức" rồi, đúng ko?
Cách của bạn của rất hay, test thử cho kết quả tương đối chính xác... Sai ở 1 điểm nguy hiểm nhất, đó là nếu như người ta viết thế này: "B24 Lô 20 khu đô thị Định Công Hoàng Mai Hà Nội Việt Nam" ko chấm phẩy gì cả thì công thức toi ngay.. hoặc giã người ta thay dấu "," thành dấu "-" công thức cũng tịt...
Cách làm của tôi là:
1> Đặt con trỏ tại cell C2 (bắt buột), vào menu Insert\Name Define, tạo 1 name tên TIM, refer to
Mã:
=IF(ISERROR(FIND(DMT,DATA!$A2,1)),"",FIND(DMT,DATA!$A2,1))
2> Bây giờ công thức tại cell C2 sẽ là:
Mã:
=IF(MAX(TIM)=0,"KHÔNG TÌM THẤY",INDEX(DMT,MATCH(MAX(TIM),TIM,0),1))
Kéo file xuống, chỉnh sửa lại 1 tí vụ sai chính tả và vụ ko thống nhất cách gọi tên tỉnh ở 2 danh sách, bảo đảm kết quả cuối cùng sẽ ko sai 1 ly... Chấp luôn ai muốn viết "," hay "*" hay "-" gì gì đó mặc kệ, thậm chí tên tỉnh nằm trong 1 đóng hằm bà lằng theo kiểu "hagasfgasfgasfgaĐồng Thápgagasdfgasfyeryuidfbnsd" nó vẫn tìm ra dc như thường, miễn sao trong chuổi có từ cần tìm!
Mời các bạn xem file và góp ý! Vì tôi nghĩ bài toán này rất thực tế trong công việc văn phòng

****************************************************

Một điều nữa nhờ các bạn xem giùm: Trong file này có thể dùng hàm FIND hoặc SEARCH, nhưng test thử thì FIND chạy nhanh hơn SEARCH, tại sao vậy?
Còn nữa, hàm FIND có phân biệt chử hoa và thường, tức Hà Nội thì khác với Hà nội, còn SEARCH thì ko... (Mới biết vụ này... )
ANH TUẤN
 

File đính kèm

Lần chỉnh sửa cuối:
nếu trong data mà có ô A2652: "925/24/2 Lê Hồng Phong Phú Thọ TDM, Bình Dương, Việt Nam" -> lúc này kết quả trả về là tỉnh Phú Thọ ....... ko phải Bình Dương
Vì thế nên mới nhờ các cao thủ hoàn thiện... Nhưng may quá, trong danh sách ko có vụ trùng này... Hên thật!
Ah, atuan... cái này ứng dụng vào các Vấn đề thực tế nào nhỉ ...... chắc không chỉ tách thế này thôi, a liệt kê ra cho các TV lần sau gặp ứng dụng luôn, thanks
Ứng dụng thì thiếu gì, nếu bạn có làm văn phòng thì thử nghĩ xem! Như tôi hiện giờ cần lấy mã Bưu chính của từng em 1, tất nhiên điều đầu tiên tôi cần phải biết nó thuộc tỉnh gì rồi.. Tách ra xong thì VLOOKUP với bãng mã bưu chính...
vấn đề nữa nếu tỉnh viết tắt (như TP HCM) ko có trong danh sách -> kết quả là 0
Cái này ko cần thiết phải lập công thức, sửa lại bằng tay trong DMT cho tương thích 2 danh sách là dc rồi...
Còn như trong sheet DATA họ viết lẩn lộn giữa 2 cách thì sẽ dùng chức năng Find and Replace của Excel đễ thay thế cho thống nhất 1 kiểu
Mến
ANH TUẤN
 
  1. Em làm VP hoài mà chẳng thấy vụ này
  2. Nếu coa ai làm như vậy thì nên theo hướng : Khuyên họ tổ chức theo CSDL : Có cột tỉnh riêng
  3. Nếu VP có vụ này : Như là TH của Bác : Tỉnh Phú Thọ là hoàn toàn có (trong DS tỉnh, nếu bác không có là do bác thiếu)
  4. Làm công thức như bác nghĩ là đơn giản, nhưng thực tế là không đơn giản đâu, em cũng hơi khá về excel mà mãi mới hiểu mà (Đặt name đã khó, đặt name theo địa chỉ tương đối còn cao hơn . . . . ). Theo em chi bằng cứ làm một cái UFD sử dụng thì đơn giản hơn nhiều. (Đơn giản để sử dụng, hơi khó hiểu để . . . hiểu)
Thân!
 
Khả năng sử dụng công thức và hàm của bác Tuấn ngày càng cao siêu. Bác nghĩ ra quá nhiều độc chiêu quá hay. Define Name của bác quả là cao siêu.

Chúc mừng anh,

Thanh Phong
 
Công thức rất hay nhưng cao siêu quá. Cám ơn nhiều.
Nghĩ mãi mà chưa ra match(max(tim),tim,0) rất hay mà khó hiểu.
Hy vọng tôi sẽ có ứng dụng về chuyện này. Chắc sẽ ứng dụng vào lọc tên KH trong diễn giải.
 
Nhân bạn Tigertiger lo ngại về việc trong chuổi có 2 từ cùng chứa tên tỉnh, chẳng hạn là Xã... Phú Thọ, TDM, Bình Dương.. như vậy thì hàm này sẽ nhận ra là tỉnh Phú Thọ hay Bình Dương?
Tôi cũng ko lường trước dc trường hợp này, nhưng thật may mắn (chuột sa chỉnh gạo) trong hàm có dùng MAX, nên nó luôn luôn lấy từ cuối cùng... hi.. hi..
Theo cách viết địa chỉ thì thường người ta viết TỈNH nằm sau cùng, nên dù phía trước nó có từ chứa tên trùng với tên tỉnh cũng ko có vấn đề gì cả...
KO CHIẾN TỰ NHIÊN THÀNH
Quá sướng! ha.. ha..
*******************************
Nếu coa ai làm như vậy thì nên theo hướng : Khuyên họ tổ chức theo CSDL : Có cột tỉnh riêng
Bắp ơi! Cái này là tôi nhận lời nhờ giúp của bạn khác, tôi cũng nghĩ nên có cột tỉnh riêng, nhưng trong dử liệu của bạn ấy ko có thì biết làm sao? Đành phải mày mò cho nó ra... Tất nhiên phải dựa và sự hổ trợ của các hàm chứ chẳng lẽ tự gõ... Nói chung là chẳng khoái tí nào khi nhận file thiếu thông tin như thế... Hic.. Hic... Và đang tỗ chức dử liệu lại đây!
ANH TUẤN
 
Lần chỉnh sửa cuối:
Nhìn chung cái hàm hoặc code nếu làm được công việc như trên cũng là rất hữu dụng.

Vấn đề này cũng thường gặp phải đối với dân văn phòng.

Ok, cảm ơn các giải pháp trong đề tài này!
 
anhtuan1066 đã viết:
Bắp ơi! Cái này là tôi nhận lời nhờ giúp của bạn khác, tôi cũng nghĩ nên có cột tỉnh riêng, nhưng trong dử liệu của bạn ấy ko có thì biết làm sao? Đành phải mày mò cho nó ra... Tất nhiên phải dựa và sự hổ trợ của các hàm chứ chẳng lẽ tự gõ... Nói chung là chẳng khoái tí nào khi nhận file thiếu thông tin như thế... Hic.. Hic... Và đang tỗ chức dử liệu lại đây!
ANH TUẤN
Nếu cần tổ chức lại dữ liệu sao Tuấn không thay tên tỉnh bằng mã tỉnh; Có phải khi đó sẽ nhẹ nhàng & thanh cảnh hơn không;
Làm bài tính xem nha:
VD CSDL của 'Người Dùng' (ND) có 1 vạn records;
Độ dài tên tỉnh của nước ta cho là trung bình 12 ký tự;
Nếu gán tên tỉnh ta sẽ phải tốn 10.000 * 12 ;
Trong khi đó, cách mình gợi í sẽ chỉ là
10.000 *2 + 80 * (2+ 12) mà thôi!
2 - Mã các tỉnh, thành;
80 = Số tỉnh thành;
Chí ít giảm đi 1/3 & với sự hỗ trợ của Combo ND sẽ không nhập sai chính tả!
theo kiểu Húê; Nghĩa/Nghiã
 
Cái này có liên quan đến em đây mà.

Anh Tuấn đang tìm cách giúp em, biết ơn bác nhiều nhiều lắm ạ. Quả là có hơi làm khó cho Bác nhưng không biết làm sao cả.
 
Cảm ơn bác SA... Em biết phải làm sao rồi... Đây cũng là giãi pháp hay, tiết kiệm dc cái nào hay cái nấy vì dử liệu quá nhiều...
Với Ngodinhquan: Tôi đang cố gắng hoàn tất, chủ yếu vẫn là việc xử lý tốc độ... Bạn chờ nhé!
ANH TUẤN
 
Của bác có một số công thức hiển thị kết quả không đúng. Bác xem nhé :
LoiMaTinh.jpg



Còn đây là File em sử dụng UFD. Bác xem nhé, nhẹ hơn nhiều.

PHP:
Function Tinh(DMTinh As Range, Chuoi As String, Kytu As String) As String
    Application.Volatile (False)
    Dim i As Integer, i1 As Integer, i2 As Integer, m As Integer, Temp As String
    For i = Len(Chuoi) To 1 Step -1
        If Mid$(Chuoi, i, 1) = Kytu Then
            m = m + 1
            If m = 1 Then
                i2 = i
            ElseIf m = 2 Then
                i1 = i + 1
                Temp = Trim$(Mid$(Chuoi, i1 + 1, i2 - i1 - 1))
                Exit For
            End If
        End If
    Next
    If WorksheetFunction.CountIf(DMTinh, Temp) > 0 Then Tinh = Temp
End Function

Thân!
 

File đính kèm

Thách Tuấn trong vòng 5 gy đó

Đây!, máy của mình báo đây; thay mã tỉnh luôn
PHP:
Option Explicit: Option Base 1
Const DDai = 15
Sub MaTinh()
 Dim DRow As Long, iJ As Long, Iz As Long, TRow As Long
 Dim StrC As String:     Dim THGian As Double
 
 THGian = Timer
 Application.ScreenUpdating = False
 Sheets("Tinh").Select
 TRow = Cells(65432, 1).End(xlUp).Row
 ReDim MMa(TRow, 2) As String
 For iJ = 2 To TRow
    MMa(iJ, 1) = Cells(iJ, 1):    MMa(iJ, 2) = Cells(iJ, 2)
 Next iJ
  Sheets("DATA").Select
 DRow = Cells(65432, 1).End(xlUp).Row
 For iJ = 2 To DRow
    For Iz = 2 To TRow
        StrC = Cells(iJ, 1)
        If InStr(Len(StrC) - DDai, StrC, MMa(Iz, 2)) > 0 Then
            Cells(iJ, 2) = MMa(Iz, 1):  Exit For
        End If
 Next Iz, iJ
 MsgBox Str(Timer - THGian), , Str(4.125)
End Sub
Còn khá nhiều tỉnh thành sai chính tả, như
Bắc Kạn - Bắc cạn;
TP HCM - Th phố Hồ Chí Minh
Con tum - ConTum
. . . .
 
Cám ơn Bắp đã phát hiện... Điều này cũng dễ giãi quyết thôi mà...
Sửa name:
Mã:
=IF(ISERROR(FIND(DMT,DATA!$A2,1)),"",FIND(DMT,DATA!$A2,1))
Thành
Mã:
=IF(ISERROR(FIND(DMT,RIGHT(DATA!$A2,25),1)),"",FIND(DMT,RIGHT(DATA!$A2,25),1))
Vì đễ ý rằng số ký tự của TINH có độ dài ký tự lớn nhất là 14... cộng với chứ Việt Nam cuối chuổi, các dấu "," và khoảng trắng thì tổng số ký tự cũng ko vượt quá 25 ký tự... he... he...
Nói chung nếu Bắp muốn làm UDF thì cũng nên dựa vào thuật toán này (dò tìm)... ko nên dùng các ký hiệu dấu "," hoặc dấu "-" làm chuẩn... sẽ cho kết quả còn sai trầm trọng hơn nữa...
Qua thử nghiệm với hàm tự tạo của Bắp, nó ko nhận ra dc chuổi khi ta viết ..... - Hà Nội - Việt Nam ... hoặc viết theo kiểu ko có chấm phẩy
Nói chung cũng khó có thể nào tạo ra 1 thuật toán chính xác 100%, tuy nhiên càng tiệm cận với chân lý thì càng tốt...
ANH TUẤN
 
anhtuan1066 đã viết:
Cám ơn Bắp đã phát hiện... Điều này cũng dễ giãi quyết thôi mà...
Sửa name:
Mã:
=IF(ISERROR(FIND(DMT,DATA!$A2,1)),"",FIND(DMT,DATA!$A2,1))
Thành
Mã:
=IF(ISERROR(FIND(DMT,RIGHT(DATA!$A2,25),1)),"",FIND(DMT,RIGHT(DATA!$A2,25),1))
Vì đễ ý rằng số ký tự của TINH có độ dài ký tự lớn nhất là 14... cộng với chứ Việt Nam cuối chuổi, các dấu "," và khoảng trắng thì tổng số ký tự cũng ko vượt quá 25 ký tự... he... he...
Nói chung nếu Bắp muốn làm UDF thì cũng nên dựa vào thuật toán này (dò tìm)... ko nên dùng các ký hiệu dấu "," hoặc dấu "-" làm chuẩn... sẽ cho kết quả còn sai trầm trọng hơn nữa...
Qua thử nghiệm với hàm tự tạo của Bắp, nó ko nhận ra dc chuổi khi ta viết ..... - Hà Nội - Việt Nam ... hoặc viết theo kiểu ko có chấm phẩy
Nói chung cũng khó có thể nào tạo ra 1 thuật toán chính xác 100%, tuy nhiên càng tiệm cận với chân lý thì càng tốt...
ANH TUẤN

Hàm UF không phải sử dụng cho các TH bác ạ (rất khó cho vấn đề chuỗi)
Cái hay của giải thuật là tìm ra các đặc trưng, đặc thù của TH riêng, sau đó mới làm UF.

Em không có tham vọng làm tất cả các TH "lung tung " của bác nói, chỉ có làm cho TH của File bác thôi. Vì mình phải hướng người khác tiến gần đến cái chuẩn chung mới là giải pháp hữu hiệu. VD như chính tả, vấn đề DS tỉnh, vấn đề chia tách tỉnh)

Thuật toán của em thì chẳng có gì cả, chẳng qua là em cắt chuỗi bắt đầu từ ký tự đặc biệt (ký tự nào cũng được) kế cuối đến ký tự đặc biệt cuối cùng. Sau đó so sánh chuỗi nhận được với danh sách tỉnh, nếu tồn tại thì lấy, nếu không thì . . thôi.

Vì đễ ý rằng số ký tự của TINH có độ dài ký tự lớn nhất là 14... cộng với chứ Việt Nam cuối chuổi, các dấu "," và khoảng trắng thì tổng số ký tự cũng ko vượt quá 25 ký tự... he... he...

VD : Ký tự cuối là : "Thành phố Hồ Chí Minh, Việt Nam" thì nó có đến 31 ký tự
Lúc khác thì : "Thành phố Hồ Chí Minh, Nước Cộng hòa xã hội chủ nghĩa Việt Nam"
Lúc đó thì cả em và bác cùng . . . toi!


Cái này giống như câu hỏi : Làm cách nào tách số nhà, quận , huyện, tỉnh Tp với các chuỗi số không đồng nhất. Vấn đề này đã bàn rất nhiều trên GPE rồi nhưng cũng chưa có giải pháp nào khả thi, vì chẳng có quy luật gì cả.

Nếu bác có hứng thú làm mấy cái công thức dạng của bác để giải quyết vấn đề đó thì mời bác hãy . . thử sức. Như thế thì em mới thấy rằng CT của bác thực sự . . hay. Còn mấy cái TH cụ thể này (như của bác ) thì . . làm thế nào là tùy!!

Thân!
 
Bắp cho hỏi nha! Nếu ko dựa vào dấu "," tại sao nó lại cho kết quả sai khi tôi bỏ dấu "," đi?
Em không có tham vọng làm tất cả các TH "lung tung " của bác nói, chỉ có làm cho TH của File bác thôi
Thì tôi cũng vậy thôi mà... dựa vào dử liệu cụ thể đễ ra thuật toán.. và trong file này ko có chổ nào là Thành phố Hồ Chí Minh, Nước Cộng hòa xã hội chủ nghĩa Việt Nam cả... he.. he..
Cái này giống như câu hỏi : Làm cách nào tách số nhà, quận , huyện, tỉnh Tp với các chuỗi số không đồng nhất
Ko giống nhau à nha! Của Bắp là tách chuổi, còn của tôi là dò tìm... 2 thuật toán hoàn toàn khác nhau! (Dò tìm dựa vào bảng danh mục có sẳn)
Nếu bác có hứng thú làm mấy cái công thức dạng của bác để giải quyết vấn đề đó thì mời bác hãy . . thử sức. Như thế thì em mới thấy rằng CT của bác thực sự . . hay. Còn mấy cái TH cụ thể này (như của bác ) thì . . làm thế nào là tùy!!
Nói chung tôi cũng ko nghĩ cái tôi làm là hay dở gì cả... Đơn giản vì tôi đang giãi quyết file giúp bạn, đến khúc này thì bí vì ko biết làm sao tách ra dc tên tỉnh nên làm đại 1 CT coi như là hổ trợ cho riêng mình... Tuy nhiên vì chưa hài lòng lắm với CT nên mới đưa lên cho mọi người tham khảo và góp ý... Đâu có vấn đề gì ghê gớm mà Bắp lại thách đố thế chứ.. Trình độ của tôi còn I TỜ IT lắm thì sao dám so sánh với các cao thủ...
Tất cả chỉ là trao đổi kinh nghiệm và học hỏi, mong Bắp hiểu cho điều này!
ANH TUẤN
 
Bác ạ !
anhtuan1066 đã viết:
Bắp cho hỏi nha! Nếu ko dựa vào dấu "," tại sao nó lại cho kết quả sai khi tôi bỏ dấu "," đi?

Dĩ nhiên là em dựa vào ký tự , đó chứ, Nếu như chuỗi không sử dụng ký tự đó thì ta chỉ thay trong công thức thôi . Em đã trình bày ở trên rồi mà.

Thì tôi cũng vậy thôi mà... dựa vào dử liệu cụ thể đễ ra thuật toán.. và trong file này ko có chổ nào là Thành phố Hồ Chí Minh, Nước Cộng hòa xã hội chủ nghĩa Việt Nam cả... he.. he..

Em cũng VD để nói rằng nếu không có quy luật thì . . thua. Với TH của bác thì có rất nhiều quy luật, với mỗi quy luật sẽ có các hướng khác nhau


Ko giống nhau à nha! Của Bắp là tách chuổi, còn của tôi là dò tìm... 2 thuật toán hoàn toàn khác nhau! (Dò tìm dựa vào bảng danh mục có sẳn)

Cũng thế thôi bác ạ, Tách ra tên đường, quận, TP. Cái còn lại là số nhà. Mà tên đường, Quận, TP thì sẽ có danh mục (muốn có thì ta lập thôi mà)
DM chẳng qua là để ta tránh sai sót thôi mà.

Nói chung tôi cũng ko nghĩ cái tôi làm là hay dở gì cả... Đơn giản vì tôi đang giãi quyết file giúp bạn, đến khúc này thì bí vì ko biết làm sao tách ra dc tên tỉnh nên làm đại 1 CT coi như là hổ trợ cho riêng mình... Tuy nhiên vì chưa hài lòng lắm với CT nên mới đưa lên cho mọi người tham khảo và góp ý... Đâu có vấn đề gì ghê gớm mà Bắp lại thách đố thế chứ.. Trình độ của tôi còn I TỜ IT lắm thì sao dám so sánh với các cao thủ...

Không nghiêm trọng đâu, ý em muốn nói với bác rằng nếu không hướng người khác đến cách tổ chức làm việc khoa học thì em và bác còn . . khổ nhiều


Tất cả chỉ là trao đổi kinh nghiệm và học hỏi, mong Bắp hiểu cho điều này!
Vâng, em hiểu mà.
Nếu có gì làm bác không vui thì em xin rút lại những lời nói trên.
ANH TUẤN

Thân!
 
anhtuan1066 đã viết:
Cám ơn Bắp đã phát hiện... Điều này cũng dễ giãi quyết thôi mà...
Sửa name:
Mã:
=IF(ISERROR(FIND(DMT,DATA!$A2,1)),"",FIND(DMT,DATA!$A2,1))
Thành
Mã:
=IF(ISERROR(FIND(DMT,RIGHT(DATA!$A2,25),1)),"",FIND(DMT,RIGHT(DATA!$A2,25),1))
Vì đễ ý rằng số ký tự của TINH có độ dài ký tự lớn nhất là 14... cộng với chứ Việt Nam cuối chuổi, các dấu "," và khoảng trắng thì tổng số ký tự cũng ko vượt quá 25 ký tự... he... he...
Nói chung nếu Bắp muốn làm UDF thì cũng nên dựa vào thuật toán này (dò tìm)... ko nên dùng các ký hiệu dấu "," hoặc dấu "-" làm chuẩn... sẽ cho kết quả còn sai trầm trọng hơn nữa...
Qua thử nghiệm với hàm tự tạo của Bắp, nó ko nhận ra dc chuổi khi ta viết ..... - Hà Nội - Việt Nam ... hoặc viết theo kiểu ko có chấm phẩy
Nói chung cũng khó có thể nào tạo ra 1 thuật toán chính xác 100%, tuy nhiên càng tiệm cận với chân lý thì càng tốt...
ANH TUẤN

oh, lâu quay lại chủ đề nay, thấy có vẻ càng đi sai hướng rồi, atuan..ơi,

atuan... không nên hạn chế 25 thế ??? theo tigertiger thì sao không dùng thêm countif... để lựa chọn thành phần cuối cùng trong chuỗi ký tự (hợp với DMT) -> khi đó chọn cái cuối cùng _> trong chuỗi đó,..

ý tưởng thế có đc k nhỉ? xin mới cao thủ cho ý kiến ...
 
atuan... không nên hạn chế 25 thế ??? theo tigertiger thì sao không dùng thêm countif... để lựa chọn thành phần cuối cùng trong chuỗi ký tự (hợp với DMT) -> khi đó chọn cái cuối cùng _> trong chuỗi đó,..
Vâng! Bài của tôi chỉ nêu thuật toán thôi... Còn áp dụng thế nào phải tùy vào trường hợp cụ thể nhất... Như Bắp đã nói rằng thuật toán dựa trên quy luật mà tạo.. đúng ko?
Với trường hợp riêng của bạn thì bạn có thể dùng COUNIF hay cái gì đó.. Nói chung đó ko phải là vấn đề ta quan tâm
 
oh, lâu quay lại chủ đề nay, thấy có vẻ càng đi sai hướng rồi, atuan..ơi,

atuan... không nên hạn chế 25 thế ??? theo tigertiger thì sao không dùng thêm countif... để lựa chọn thành phần cuối cùng trong chuỗi ký tự (hợp với DMT) -> khi đó chọn cái cuối cùng _> trong chuỗi đó,..

ý tưởng thế có đc k nhỉ? xin mới cao thủ cho ý kiến ...

Em có ý kiến nhé các BÁC, ANH TUẤN viết rất hay (em đang nói bài này về công thức, không dám bàn VBA), qua đọc từ đầu đến đuôi và thử nhiều lần, em xin "mượn gió bẻ măng" mạn phép lấy công thức của ANH TUẤN sửa cho ANH TUẤN như sau:
Mã:
[COLOR=darkorchid]TIM[/COLOR] =IF(ISERROR([COLOR=red]SEARCH[/COLOR](DMT,RIGHT(DATA!$A2,[COLOR=blue]30[/COLOR]),1)),"",[COLOR=red]SEARCH[/COLOR](DMT,RIGHT(DATA!$A2,[COLOR=blue]30[/COLOR]),1))

LÝ DO:

1) Em chọn SEARCH thay cho FIND là vì SEARCH không phân biệt chữ Hoa hay Thường, ví dụ "TP HCM" em chỉ cần gõ "tp hcm" là "KHÔNG TÌM THẤY" ngay. Vấn đề nhanh hay chậm không mấy quan trọng so với kết quả đạt được.

2) Đặt số 30 (có thể hơn) thay cho 25 là vì em thử viết "***, nước Việt Nam" (đảm bảo >=25) thì OK, nhưng em thử đặt "***, Việt Nam country" thì kết quả "KHÔNG TÌM THẤY", nên em chọn là 30.

Kính mong các BÁC, các ANH, CHỊ chỉ giáo thêm.
 
Lần chỉnh sửa cuối:
1) Em chọn SEARCH thay cho FIND là vì SEARCH không phân biệt chữ Hoa hay Thường, ví dụ "TP HCM" em chỉ cần gõ "tp hcm" là "KHÔNG TÌM THẤY" ngay. Vấn đề nhanh hay chậm không mấy quan trọng so với kết quả đạt được.
.
Tại bạn chưa biết đó thôi, SEARCH có 1 cái dở hơn FIND, đó là tốc độ ---> Hãy thử với dử liệu thật lớn sẽ thấy SEARCH chậm hơn FIND rất nhiều
 
Tại bạn chưa biết đó thôi, SEARCH có 1 cái dở hơn FIND, đó là tốc độ ---> Hãy thử với dử liệu thật lớn sẽ thấy SEARCH chậm hơn FIND rất nhiều

Dạ, thưa Thầy NDU và Thầy ANH TUẤN, nếu kết quả cho đúng (99%), dĩ nhiên chỉ cần Filter cho những cái "KHÔNG TÌM THẤY" và sửa lại (1%) thì vẫn nhanh hơn là thời gian tính FIND nhiều phải không ạ? Bởi vì đâu mấy ai nhập đúng hoàn toàn trừ khi có Form với Combobox... hỗ trợ phải không ạ?
Còn việc Ctrl+H thì em đồng ý về điều này!
Xin cảm ơn.
 
Vì thế nên mới nhờ các cao thủ hoàn thiện... Nhưng may quá, trong danh sách ko có vụ trùng này... Hên thật!

Ứng dụng thì thiếu gì, nếu bạn có làm văn phòng thì thử nghĩ xem! Như tôi hiện giờ cần lấy mã Bưu chính của từng em 1, tất nhiên điều đầu tiên tôi cần phải biết nó thuộc tỉnh gì rồi.. Tách ra xong thì VLOOKUP với bãng mã bưu chính...

Cái này ko cần thiết phải lập công thức, sửa lại bằng tay trong DMT cho tương thích 2 danh sách là dc rồi...
Còn như trong sheet DATA họ viết lẩn lộn giữa 2 cách thì sẽ dùng chức năng Find and Replace của Excel đễ thay thế cho thống nhất 1 kiểu
Mến
ANH TUẤN

Anh Tuấn ơi ,
Em đã áp dụng theo cách anh cho , nhưng không được . Tuy nhiên em thấy nó hay lắm , lại đang cần gấp lắm , em đang tách các quận , huyện ở ĐN , dữ liệu hơn 80.000 , nhưng được cái , ở ĐN chỉ có 7 quận huyện thôi . Nên thấy cách của anh là hay nhất , nhưng em mãi không áp dụng được . Anh giúp em gấp với
Cảm ơn anh
 
Anh Tuấn ơi ,
Em đã áp dụng theo cách anh cho , nhưng không được . Tuy nhiên em thấy nó hay lắm , lại đang cần gấp lắm , em đang tách các quận , huyện ở ĐN , dữ liệu hơn 80.000 , nhưng được cái , ở ĐN chỉ có 7 quận huyện thôi . Nên thấy cách của anh là hay nhất , nhưng em mãi không áp dụng được . Anh giúp em gấp với
Cảm ơn anh
Nếu không áp dụng được thì bạn đưa file lên vậy (chứ biết làm sao)
 
File này của bác Tuấn hay thật. Mình áp dụng cho đủ thứ. Tách tên tỉnh, tên NH, tên mặt hàng, nói chung là tất cả những gì mà bị gom chung lại 1 cell mà muốn tách ra thì áp dụng được tất.
 
File này của bác Tuấn hay thật. Mình áp dụng cho đủ thứ. Tách tên tỉnh, tên NH, tên mặt hàng, nói chung là tất cả những gì mà bị gom chung lại 1 cell mà muốn tách ra thì áp dụng được tất.
Ngày xưa còn... NGU nên công thức cũng lòng vòng
Nếu là bây giờ thì tôi sẽ làm khác:
- Chỉ cần 1 name DMT (bỏ name TIM)
- Công thức tại C2:
Mã:
=LOOKUP(2,1/COUNTIF($A2,"*"&DMT&"*"),DMT)
Hoặc:
Mã:
=LOOKUP(2,1/FIND(DMT,$A2),DMT)
 

File đính kèm

File này của bác Tuấn hay thật. Mình áp dụng cho đủ thứ. Tách tên tỉnh, tên NH, tên mặt hàng, nói chung là tất cả những gì mà bị gom chung lại 1 cell mà muốn tách ra thì áp dụng được tất.
Cùng còn tùy trường hợp. Hơn nữa phải cẩn thận vì không phải là không có trường hợp kết quả sai. Ví dụ như:

Khách sạn Hòa Bình, số 9 Võ Thị Sáu, Biên Hòa, Đồng Nai

2 Điện Biên Phủ, Q Ninh Kiều, Cần Thơ
 
Hôm nay áp dụng cho việc tách tên các ngân hàng thì bị gặp 1 vấn đề là hàm Find nó phân biệt cả chữ hoa lẫn chữ thường hay sao í bác Tuấn ạ. Thế là từ raw data, mình lại phải hì hục thêm 1 bước đổi cho thành Upper hoặc Lower hết, còn cái danh mục thì cũng phải đổi thành Upper hoặc Lower hết luôn.

Bác huuthang_bd xem có phải là do vụ chữ hoa, chữ thường mà nó không chạy ra không.

Post xong bài thì thử 2 ví dụ của bác Thắng, chạy vẫn ok mà bác.
 
Hôm nay áp dụng cho việc tách tên các ngân hàng thì bị gặp 1 vấn đề là hàm Find nó phân biệt cả chữ hoa lẫn chữ thường hay sao í bác Tuấn ạ. Thế là từ raw data, mình lại phải hì hục thêm 1 bước đổi cho thành Upper hoặc Lower hết, còn cái danh mục thì cũng phải đổi thành Upper hoặc Lower hết luôn.

Bác huuthang_bd xem có phải là do vụ chữ hoa, chữ thường mà nó không chạy ra không.
.

Thì bạn thay FIND thành SEARCH đi
2 hàm này dùng y chang nhau. Cái khác duy nhất giữa chúng là hàm SEARCH không phân biệt HOA thường (chính thế mà hàm SEARCH cho tốc độ chậm hơn)
Post xong bài thì thử 2 ví dụ của bác Thắng, chạy vẫn ok mà bác.
Cũng chưa chắc đâu. Ví dụ chuổi: Khách sạn Hòa Bình, số 9 Võ Thị Sáu, Biên Hòa, Đồng Nai thì công thức sẽ cho kết quả là Hòa Bình, trong khi phải là Đồng Nai mới đúng ---> Nói chung sẽ tùy trường hợp cụ thể ta sẽ chỉnh sửa cho phù hợp thôi
 
Lần chỉnh sửa cuối:
các cao thu giup em voi....em muon tach tu mot cell gom xa huyen tinh (Thái Bình, Châu Thành, Tây Ninh) em muon tach lam 3 cell xa huyen tinh rieng thi lam sao...cam on
 
Xin góp 1 hàm để lấy tên tỉnh cho thớt:
=TRIM(RIGHT(SUBSTITUTE(LEFT(A2,LEN(A2)-10),",",REPT(" ",255)),255))
=LEFT(TRIM(RIGHT(SUBSTITUTE(A2,",",REPT(" ",255)),355)),LEN(TRIM(RIGHT(SUBSTITUTE(A2,",",REPT(" ",255)),355)))-9)
 
Lần chỉnh sửa cuối:
các cao thu giup em voi....em muon tach tu mot cell gom xa huyen tinh (Thái Bình, Châu Thành, Tây Ninh) em muon tach lam 3 cell xa huyen tinh rieng thi lam sao...cam on

Ví dụ: chuỗi "Thái Bình, Châu Thành, Tây Ninh" đặt ở A1, công thức:
B1 = TRIM(MID(SUBSTITUTE(", "&$A$1;", ";REPT(" ";200));COLUMN(A1)*200;200))
kéo công thức qua phải
 
Thực tế chẳng đơn giản chỉ có chuỗi "Thái Bình, Châu Thành, Tây Ninh" ở trong ô đâu. Bạn đưa khoảng chục dòng dữ liệu thực lên xem
 
Thực tế chẳng đơn giản chỉ có chuỗi "Thái Bình, Châu Thành, Tây Ninh" ở trong ô đâu. Bạn đưa khoảng chục dòng dữ liệu thực lên xem
Anh ơi, chủ thớt này có vẻ hỏi cho vui thôi, người ta giúp như thế mà chẳng thấy xuất hiện
 
các cao thu giup em voi....em muon tach tu mot cell gom xa huyen tinh (Thái Bình, Châu Thành, Tây Ninh) em muon tach lam 3 cell xa huyen tinh rieng thi lam sao...cam on

Đầu tiên hết, em nên đọc kỹ quy luật diễn đàn. Kế đó tập gõ tiếng Việt có dấu.
Bởi vì bài của em phạm quy cho nên "phan lon cac cao thu tranh khong muon giup em"
 
Em vẫn chưa hiểu rõ về vấn đề này, mong anh có hình ảnh các thao tác được không ạ?
Vì em đã gán define name nhưng không biết gán hàm ntn tiếp. Cảm ơn anh ạ+-+-+-+
 
Rất cảm ơn các bạn đã đưa ra giải pháp hay cho việc tách tên tỉnh. Mình cũng đang có bài toán tương tự, nhưng mình có cột tỉnh riêng rồi, cái mình cần là tách tên huyện từ ô địa chỉ. Mình áp dụng một cách máy móc công thức giống như tách tên tỉnh cho việc tách huyện nhưng kết quả còn nhiều chỗ chưa đúng. Mình có vài điểm chưa hiểu mong các bạn giải thích hộ.

1. Trong công thức, mình không hiểu lắm việc dùng "2" cho LOOKUP_VALUE và "1/" cho LOOKUP_VECTOR trong hàm LOOKUP. Có lẽ đây là câu hỏi mình mong được giải đáp nhất.
2. Trong bảng mã quận huyện hiện nay có các quận số (như Quận 1, TPHCM), ở tên quận chỉ có số 1, điều này khiến cho kết quả bị sai khi trong địa chỉ có số nhà. Với riêng bài toán này, mình có thể sửa lại bảng mã huyện để thêm chữ Quận vào trước chữ số (ví dụ như Quận 1 thay vì số 1), tuy nhiên, khi ghép thành tên quận nói chung nó sẽ thành Quận Quận 1. Liệu có cách nào khác việc sửa bảng mã đối với các số này không?
3. Khi tên huyện trùng nhau, hàm có thể trả về đúng tên huyện nhưng lại sai tên tỉnh và sai mã huyện, tỉnh. Làm cách nào để tham chiếu thêm đến tên tỉnh để cho ra đúng mã huyện (các tỉnh miền Tây Nam Bộ hầu hết đều có huyện Châu Thành)

Mình gửi kèm file có kèm bảng mã huyện và công thức mình thử. Mong nhận được hỗ trợ của các bạn. Mình cảm ơn!
 

File đính kèm

Rất cảm ơn các bạn đã đưa ra giải pháp hay cho việc tách tên tỉnh. Mình cũng đang có bài toán tương tự, nhưng mình có cột tỉnh riêng rồi, cái mình cần là tách tên huyện từ ô địa chỉ. Mình áp dụng một cách máy móc công thức giống như tách tên tỉnh cho việc tách huyện nhưng kết quả còn nhiều chỗ chưa đúng. Mình có vài điểm chưa hiểu mong các bạn giải thích hộ.

1. Trong công thức, mình không hiểu lắm việc dùng "2" cho LOOKUP_VALUE và "1/" cho LOOKUP_VECTOR trong hàm LOOKUP. Có lẽ đây là câu hỏi mình mong được giải đáp nhất.
2. Trong bảng mã quận huyện hiện nay có các quận số (như Quận 1, TPHCM), ở tên quận chỉ có số 1, điều này khiến cho kết quả bị sai khi trong địa chỉ có số nhà. Với riêng bài toán này, mình có thể sửa lại bảng mã huyện để thêm chữ Quận vào trước chữ số (ví dụ như Quận 1 thay vì số 1), tuy nhiên, khi ghép thành tên quận nói chung nó sẽ thành Quận Quận 1. Liệu có cách nào khác việc sửa bảng mã đối với các số này không?
3. Khi tên huyện trùng nhau, hàm có thể trả về đúng tên huyện nhưng lại sai tên tỉnh và sai mã huyện, tỉnh. Làm cách nào để tham chiếu thêm đến tên tỉnh để cho ra đúng mã huyện (các tỉnh miền Tây Nam Bộ hầu hết đều có huyện Châu Thành)

Mình gửi kèm file có kèm bảng mã huyện và công thức mình thử. Mong nhận được hỗ trợ của các bạn. Mình cảm ơn!
Tìm tên huyện tức là tìm theo 2 điều kiện: Vừa đúng tỉnh vừa đúng huyện (bởi có trường hợp tỉnh này có huyện trùng tên với huyện của tỉnh khác)
Vậy công thức sửa lại là:
1> Tìm tên huyện (dùng COUNTIF)
Mã:
=LOOKUP(2,1/COUNTIF($A2,"*"&Ten_tinh&"*")/COUNTIF($A2,"*"&Ten_huyen&"*"),Ten_huyen)
2> Tìm tên huyện (dùng SEACH) <--- Dùng SEARCH sẽ không phân biệt chữ HOA chữ thường
Mã:
=LOOKUP(2,1/SEARCH(Ten_tinh,$A2)/SEARCH(Ten_huyen,$A2),Ten_huyen)
3> Tìm mã huyện (dùng COUNTIF)
Mã:
=LOOKUP(2,1/COUNTIF($A2,"*"&Ten_tinh&"*")/COUNTIF($A2,"*"&Ten_huyen&"*"),Ma_huyen)
4> Tìm mã huyện (dùng SEARCH)
Mã:
=LOOKUP(2,1/SEARCH(Ten_tinh,$A2)/SEARCH(Ten_huyen,$A2),Ma_huyen)
-----------------------------------
Có một vài chỗ bị lỗi là do:
- Data nhập sai chính tả, chẳng hạn ghi Đắc lắc thay vì là Đăk Lăk hoặc TP HCM thay vì đúng phải là TP. Hồ Chí Minh
- Data nhập có tên tỉnh nhưng thiếu tên huyện nên không tìm thấy
vân vân...
 

File đính kèm

Cảm ơn ndu96081631 đã sửa giúp công thức. Bạn có viết là hàm FIND nhanh hơn hàm SEARCH, đặc biệt với dữ liệu lớn. Dữ liệu của mình trên 30K dòng, nên mình dùng hàm FIND và khắc phục nhược điểm chữ hoa chữ thường bằng cách dùng kèm với hàm LOWER. Mình thấy FIND đúng là nhanh hơn hẳn. Một lần nữa cảm ơn bạn đã hỗ trợ.

Bạn có thể giải thích cho mình ý nghĩa của số 2 và số 1 trong công thức không? Ký tự "/" trong công thức mình hiểu là một dạng kiểu như hàm AND có đúng không bạn? Mình muốn hiểu rõ để có thể áp dụng cho các trường hợp khác nữa. Hoặc bạn có thể cho link để mình tìm nếu câu hỏi này đã được trả lời ở đâu đó (vì mình tìm không thấy). Một lần nữa cảm ơn bạn.
 
Lần chỉnh sửa cuối:
Bạn có thể giải thích cho mình ý nghĩa của số 2 và số 1 trong công thức không? Ký tự "/" trong công thức mình hiểu là một dạng kiểu như hàm AND có đúng không bạn? Mình muốn hiểu rõ để có thể áp dụng cho các trường hợp khác nữa. Hoặc bạn có thể cho link để mình tìm nếu câu hỏi này đã được trả lời ở đâu đó (vì mình tìm không thấy). Một lần nữa cảm ơn bạn.

Cú pháp mà tôi thường dùng cho bài toán tìm kiếm nhiều điều kiện nó thế này:
Mã:
=LOOKUP(2, [COLOR=#ff0000]1/(Điều kiện 1)/(Điều kiện 2)/(....)/(Điều kiện n)[/COLOR], [COLOR=#0000cd]Vùng kết quả[/COLOR])
/ là phép chia thôi. Bạn có nghĩa mường tượng nó là AND cũng được.
Nguyên cái đống màu đỏ ở trên nghĩa là số 1 chia cho các điều kiện. Mỗi điều kiện là 1 biểu thức trả về 1 mảng gồm kết quả TRUE, FALSE hoặc number gì đó tùy ý. Ví dụ (A1:A10="OK") sẽ cho kết quả 1 mảng 10 phần tử toàn TRUE hoặc FALSE vậy 1/(A1:A10="OK") sẽ là số 1 chia cho mảng TRUE, FALSE ấy, kết quả nhận được sẽ là số 1 hoặc lỗi DIV/0
Vậy sau khi chia tưa lưa hột dưa như cú pháp trên, kết quả nhận được sẽ là 1 mảng gồm các số 1 (hoặc nhỏ hơn 1) và lỗi DIV/0
Cú pháp lookup tôi ghi ở trên sẽ tìm số 2 trong mảng màu đỏ, tìm thấy bất cứ số nào <2 cuối cùng nó sẽ lấy rồi tra sang vùng kết quả tương ứng. Nếu có nhiều kết quả tìm thấy, LOOKUP (như cú pháp trên) sẽ lấy kết quả sau cùng.
Đương nhiên bạn có thể thay số 2 thành bất cứ số nào mà bạn tin rằng nó lớn hơn bất cứ phần tử nào trong mảng màu đỏ kia
-------------------------
Mệt quá! Nói một hồi có khi mình cũng... khình luôn!
Bạn hiểu thì tốt, nếu chưa hiểu cũng không sao, cứ y chang cú pháp lookup tôi ghi mà phang tới là được (mai này từ từ hiểu hoặc vẫn không hiểu --=0)
Ẹc... Ẹc...
 
Oa, quả là vi diệu. Mình hiểu cách bạn đặt điều kiện rồi. Không thể nói gì ngoài từ xuất sắc. Cảm ơn bạn rất nhiều!
 
Oa, quả là vi diệu. Mình hiểu cách bạn đặt điều kiện rồi. Không thể nói gì ngoài từ xuất sắc. Cảm ơn bạn rất nhiều!

Cú pháp mà tôi thường dùng cho bài toán tìm kiếm nhiều điều kiện nó thế này:
Mã:
=LOOKUP(2, [COLOR=#ff0000]1/(Điều kiện 1)/(Điều kiện 2)/(....)/(Điều kiện n)[/COLOR], [COLOR=#0000cd]Vùng kết quả[/COLOR])
/ là phép chia thôi. Bạn có nghĩa mường tượng nó là AND cũng được.
Nguyên cái đống màu đỏ ở trên nghĩa là số 1 chia cho các điều kiện. Mỗi điều kiện là 1 biểu thức trả về 1 mảng gồm kết quả TRUE, FALSE hoặc number gì đó tùy ý. Ví dụ (A1:A10="OK") sẽ cho kết quả 1 mảng 10 phần tử toàn TRUE hoặc FALSE vậy 1/(A1:A10="OK") sẽ là số 1 chia cho mảng TRUE, FALSE ấy, kết quả nhận được sẽ là số 1 hoặc lỗi DIV/0
Vậy sau khi chia tưa lưa hột dưa như cú pháp trên, kết quả nhận được sẽ là 1 mảng gồm các số 1 (hoặc nhỏ hơn 1) và lỗi DIV/0
Cú pháp lookup tôi ghi ở trên sẽ tìm số 2 trong mảng màu đỏ, tìm thấy bất cứ số nào <2 cuối cùng nó sẽ lấy rồi tra sang vùng kết quả tương ứng. Nếu có nhiều kết quả tìm thấy, LOOKUP (như cú pháp trên) sẽ lấy kết quả sau cùng.
Đương nhiên bạn có thể thay số 2 thành bất cứ số nào mà bạn tin rằng nó lớn hơn bất cứ phần tử nào trong mảng màu đỏ kia
-------------------------
Mệt quá! Nói một hồi có khi mình cũng... khình luôn!
Bạn hiểu thì tốt, nếu chưa hiểu cũng không sao, cứ y chang cú pháp lookup tôi ghi mà phang tới là được (mai này từ từ hiểu hoặc vẫn không hiểu --=0)
Ẹc... Ẹc...
 
Cú pháp lookup tôi ghi ở trên sẽ tìm số 2 trong mảng màu đỏ, tìm thấy bất cứ số nào <2 cuối cùng nó sẽ lấy rồi tra sang vùng kết quả tương ứng. Nếu có nhiều kết quả tìm thấy, LOOKUP (như cú pháp trên) sẽ lấy kết quả sau cùng.

Bạn cho hỏi thêm về lấy "kết quả sau cùng" mà bạn nói trên. Công thức mình dùng là
=LOOKUP(2,1/FIND(LOWER(Prov_name),LOWER($A2))/FIND(LOWER(Dist_name),LOWER($A2)),Dist_name)

Trong khi công thức cho kết quả đúng ở hầu hết các tỉnh thì riêng các địa chỉ tại TPHCM công thức trả về kết quả sai rất nhiều. Ví dụ

"17 Bà Huyện Thanh Quan, quận 3, TPHCM" ---> CT trả về là Q7 thay vì Q3
"491/15 Trường Chinh, quận Tân Bình, TPHCM" ---> CT lại trả về là Q9 thay vì quận Tân Bình
"198 đường Mã Lò, phường Bình Trị Đông A, quận Bình Tân, TPHCM" ---> CT trả về là Q8 thay vì quận Bình Tân

Một số trường hợp khác thì sai khi tên đường/phố trùng với tên quận, huyện, ví dụ:
"49 Hai Bà Trưng, quận Hoàn Kiếm, Hà Nội" ---> hàm sẽ trả về là quận Hai Bà Trưng mà đúng ra phải là quận Hoàn Kiếm.

Mình không hiểu cái "kết quả cuối cùng" mà hàm trả về trong các trường hợp này. Bạn có thể chỉ giúp cách thêm hàm/điều kiện vào công thức để lọc các trường hợp tìm thấy nhiều kết quả thì hàm trả về kết quả là tên huyện/quận ở vị trí gần cuối trong địa chỉ (vì hầu hết quận, huyện sẽ ở cuối địa chỉ, chỉ trước tên tỉnh). Cảm ơn bạn.
 

File đính kèm

Trong khi công thức cho kết quả đúng ở hầu hết các tỉnh thì riêng các địa chỉ tại TPHCM công thức trả về kết quả sai rất nhiều. Ví dụ

"17 Bà Huyện Thanh Quan, quận 3, TPHCM" ---> CT trả về là Q7 thay vì Q3
"491/15 Trường Chinh, quận Tân Bình, TPHCM" ---> CT lại trả về là Q9 thay vì quận Tân Bình
"198 đường Mã Lò, phường Bình Trị Đông A, quận Bình Tân, TPHCM" ---> CT trả về là Q8 thay vì quận Bình Tân

Một số trường hợp khác thì sai khi tên đường/phố trùng với tên quận, huyện, ví dụ:
"49 Hai Bà Trưng, quận Hoàn Kiếm, Hà Nội" ---> hàm sẽ trả về là quận Hai Bà Trưng mà đúng ra phải là quận Hoàn Kiếm.

Mình không hiểu cái "kết quả cuối cùng" mà hàm trả về trong các trường hợp này. Bạn có thể chỉ giúp cách thêm hàm/điều kiện vào công thức để lọc các trường hợp tìm thấy nhiều kết quả thì hàm trả về kết quả là tên huyện/quận ở vị trí gần cuối trong địa chỉ (vì hầu hết quận, huyện sẽ ở cuối địa chỉ, chỉ trước tên tỉnh). Cảm ơn bạn.

1> Những địa chỉ thuộc TP.HCM bị sai là do data của bạn sai. Chuyển sang sheet "HUYEN", filter khu vực "Hồ Chí Minh" bạn sẽ biết lý do (thừa quá trời quận luôn).
2> Khu vực Hà Nội, địa chỉ "49 Hai Bà Trưng, quận Hoàn Kiếm, Hà Nội" bị sai là do Hà Nội vừa có quận Hai Bà Trưng, vừa có quận Hoàn Kiếm. Vậy bạn có thể sửa bằng cách thêm chữ "Quận" vào cột D sheet HUYEN (Quận Ba Đình, Quận Hoàn Kiếm...). Hoặc dời Hai Bà Trưng lên đâu còn Hoàn Kiếm xuống dưới. Như đã nói ở bài trước, LOOKUP sẽ tìm và ưu tiên cái cuối cùng trong trường hợp tìm thấy 2 kết quả
3> Một vài chỗ nhập liệu không thống nhất, ví dụ chỗ thì Đức Hòa, chỗ lại Đức Hoà (sai vị trí dấu huyền) nên bị lỗi
-------------------------
Nói chung nhập liệu lung tung thì không có cách nào tìm chính xác 100% được. Chỗ nào sai đành phải kiểm tra thủ công thôi
 

File đính kèm

Bạn cho hỏi là có thể lồng hàm MAX vào công thức này không để nếu tìm thấy hai tên tỉnh thì nó sẽ lấy tên xuất hiện sau cùng trong công thức? Mình thử mãi chưa ra. Cảm ơn bạn.

Ví dụ lại hai trường hợp trước:
Khách sạn Hòa Bình, số 9 Võ Thị Sáu, Biên Hòa, Đồng Nai
2 Điện Biên Phủ, Q Ninh Kiều, Cần Thơ

Dùng cách cũ của bạn (tức là có thêm TIM) thì ok vì có hàm MAX, nhưng cách ở bài này thì không có nên cho kết quả sai.

Ngày xưa còn... NGU nên công thức cũng lòng vòng
Nếu là bây giờ thì tôi sẽ làm khác:
- Chỉ cần 1 name DMT (bỏ name TIM)
- Công thức tại C2:
Mã:
=LOOKUP(2,1/COUNTIF($A2,"*"&DMT&"*"),DMT)
Hoặc:
Mã:
=LOOKUP(2,1/FIND(DMT,$A2),DMT)
 
Công thức cũ của anhtuan hay hơn công thức mới. công thức mới hạn chế nhiều lắm
 
Ngày xưa còn... NGU nên công thức cũng lòng vòng
Nếu là bây giờ thì tôi sẽ làm khác:
- Chỉ cần 1 name DMT (bỏ name TIM)
- Công thức tại C2:
Mã:
=LOOKUP(2,1/COUNTIF($A2,"*"&DMT&"*"),DMT)
Hoặc:
Mã:
=LOOKUP(2,1/FIND(DMT,$A2),DMT)
Công thức này ngắn nhưng không hay bằng công thức đầu. Công thức này bị hạn chế DMT. Không được có dòng trống
 
Ngày xưa còn... NGU nên công thức cũng lòng vòng
Nếu là bây giờ thì tôi sẽ làm khác:
- Chỉ cần 1 name DMT (bỏ name TIM)
- Công thức tại C2:
Mã:
=LOOKUP(2,1/COUNTIF($A2,"*"&DMT&"*"),DMT)
Hoặc:
Mã:
=LOOKUP(2,1/FIND(DMT,$A2),DMT)
Chân thành cảm ơn các thầy và anh chị vì công thức trên đã giúp em rất nhiều. Tuy nhiên có một điều em kính mong các thầy và anh chị giải đáp cho. Em đã tự nghiên cứu và nghiền ngẫm bằng kiến thức và kinh nghiệm ít ỏi của mình. Tuy nhiên sau 2 tuẫn lễ em vẫn chưa hiểu logic của công thức trên. Mọi người hãy thông não giúp em FIND(DMT,$A2),DMT) và COUNTIF($A2,"*"&DMT&"*"),DMT) nó hoạt động như thế nào. Vì như sự hiểu của em, em đã đặt công thức này và enter thì chỉ báo lỗi. Mà sao nó gộp vào vào Lookup lại chạy được. Em mong được giải đáp chi tiết hoặc hướng dẫn đọc ở tài liệu hoặc bài nào đó, em có khả năng đọc tài liệu Tiếng Anh tốt nhưng tìm mãi mà chẳng thấy chỗ nào giải thích về cái cơ chế của mấy thể loại trên. Một lần nữa, em xin chân thành cảm ơn sự giúp đỡ !
 

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

Back
Top Bottom