Tách được ra thành xã và thôn chứ cô chứ đâu chỉ tách ký tự
Tách xã và thôn được ngăn cách nhau bằng dấu -
Chọn dấu - trong mục Other của mục Delimiters đó
Cô làm thử đi!
Nhưng không biết linhvn_vpc muốn như vậy không nữa? hii
Tách được ra thành xã và thôn chứ cô chứ đâu chỉ tách ký tự
Tách xã và thôn được ngăn cách nhau bằng dấu -
Chọn dấu - trong mục Other của mục Delimiters đó
Cô làm thử đi!
Nhưng không biết linhvn_vpc muốn như vậy không nữa? hii
Em nhờ các bác giúp, từ một địa danh chung chung, xây dựng hàm tách ra thôn, xã. Danh mục thôn xã đã có sẵn và chỉ tách những địa danh có trong danh mục thôi. địa danh gõ không có quy định nào cả, miễn là tìm được xã và thôn trong đó. Em nghĩ mãi không được!
File em đính kèm. Nếu không đúng chủ để mong BQT thông cảm!
Em nhờ các bác giúp, từ một địa danh chung chung, xây dựng hàm tách ra thôn, xã. Danh mục thôn xã đã có sẵn và chỉ tách những địa danh có trong danh mục thôi. địa danh gõ không có quy định nào cả, miễn là tìm được xã và thôn trong đó. Em nghĩ mãi không được!
File em đính kèm. Nếu không đúng chủ để mong BQT thông cảm!
bác quanghai1960 lam chưa đúng ý em rồi. Nếu chỉ dựa vào dấu "," hoặc "-" để tách ra như bác thì thôn và xã đâu có nằm trong danh mục và yêu cầu như vậy thì đơn giản quá. Nếu có dữ liệu chuẩn thì lại không phải nghĩ ra việc này rồi. Ý em ở đây là nhờ các bác xây dựng giúp em 2 hàm. Hàm 1 tìm ra được xã dựa vào địa danh, hàm 2 tìm ra được thôn trong xã đó, dựa vào danh mục thôn và xã cũng như địa danh.
bác quanghai1960 lam chưa đúng ý em rồi. Nếu chỉ dựa vào dấu "," hoặc "-" để tách ra như bác thì thôn và xã đâu có nằm trong danh mục và yêu cầu như vậy thì đơn giản quá. Nếu có dữ liệu chuẩn thì lại không phải nghĩ ra việc này rồi. Ý em ở đây là nhờ các bác xây dựng giúp em 2 hàm. Hàm 1 tìm ra được xã dựa vào địa danh, hàm 2 tìm ra được thôn trong xã đó, dựa vào danh mục thôn và xã cũng như địa danh.
Nếu là mình thì mình sẽ kèm theo kết quả tạm trong file, diễn giải bằng từ ngữ thì ai viết người đó hiểu. Yêu cầu là tách ra thì mình tách ra rồi bảo là không đúng, bạn có yêu cầu tìm cái nào trong cái nào đâu.
Nếu là mình thì mình sẽ kèm theo kết quả tạm trong file, diễn giải bằng từ ngữ thì ai viết người đó hiểu. Yêu cầu là tách ra thì mình tách ra rồi bảo là không đúng, bạn có yêu cầu tìm cái nào trong cái nào đâu.
Thực sự, yêu cầu này làm trong cel thì em chưa làm được. Em chỉ nhập một vài kết quả để bác thấy và giúp em. Đầu tiên phải tìm ra xã trước bằng cách tìm trong địa danh có chứa xã nào trong danh mục. Sau đó tìm ra thôn trong xã đó nếu địa danh có chứa thôn của xã đó.
Trong sql thì em dùng hàm like, trong cel thì hàm like không làm được.
Mong bác giúp!
Thực sự, yêu cầu này làm trong cel thì em chưa làm được. Em chỉ nhập một vài kết quả để bác thấy và giúp em. Đầu tiên phải tìm ra xã trước bằng cách tìm trong địa danh có chứa xã nào trong danh mục. Sau đó tìm ra thôn trong xã đó nếu địa danh có chứa thôn của xã đó.
Trong sql thì em dùng hàm like, trong cel thì hàm like không làm được.
Mong bác giúp!
Sub tach()
Dim dl(), i As Long, tim As Object
Range([A2], [a65536].End(3)).Copy [B2:C2]
dl = Range([b2], [C65536].End(3)).Value
With CreateObject("Vbscript.Regexp")
.Global = True
.Pattern = "-.*|,.*"
For i = 1 To UBound(dl)
dl(i, 2) = Trim(.Replace(dl(i, 2), ""))
Set tim = Sheet2.[a:a].Find(dl(i, 2), , , xlWhole)
If tim Is Nothing Then dl(i, 2) = ""
Next
.Pattern = ".*-|.*,|TT"
For i = 1 To UBound(dl)
dl(i, 1) = Trim(.Replace(dl(i, 1), ""))
Next
End With
[b2].Resize(i - 1, 2) = dl
End Sub
Sub tach()
Dim dl(), i As Long, tim As Object
Range([A2], [a65536].End(3)).Copy [B2:C2]
dl = Range([b2], [C65536].End(3)).Value
With CreateObject("Vbscript.Regexp")
.Global = True
.Pattern = "-.*|,.*"
For i = 1 To UBound(dl)
dl(i, 2) = Trim(.Replace(dl(i, 2), ""))
Set tim = Sheet2.[a:a].Find(dl(i, 2), , , xlWhole)
If tim Is Nothing Then dl(i, 2) = ""
Next
.Pattern = ".*-|.*,|TT"
For i = 1 To UBound(dl)
dl(i, 1) = Trim(.Replace(dl(i, 1), ""))
Next
End With
[b2].Resize(i - 1, 2) = dl
End Sub
Trật là chắc rồi. Ta xét dòng 32 là "XN Thuỷ nông - Móng Cầu - Thái Hòa"
code
Mã:
For i = 1 To UBound(dl)
dl(i, 2) = Trim(.Replace(dl(i, 2), ""))
Set tim = Sheet2.[a:a].Find(dl(i, 2), , , xlWhole)
If tim Is Nothing Then dl(i, 2) = ""
Next
Tôi hiểu là tìm thôn. Nhưng khi code thực hiện xong dòng dl(i, 2) = Trim(.Replace(dl(i, 2), ""))
thì dl(i, 2) = "XN Thuỷ nông", tức tiếp theo "tim = Nothing", và dl(i, 2) = "" --> không tìm thấy thôn. Trong khi đó thôn chính là "Móng Cầu"
-------------
Bạn chủ đề tài nên miêu tả dữ liệu. Tôi không thích trò đoán mò vì đã đoán thì xác suất trúng không bao giờ là 1.
Dữ liệu của bạn:
1. Xã luôn là cuối cùng? Sau xã không có "tỉnh" hay bất cứ cái gì? Vd. "khu tự trị" hay tương tự?
2. Trước xã bao giờ cũng là thôn, không có gì xen kẽ (trừ các ký tự là "-", ",". Đã hết chưa hay còn những ký tự khác?) giữa chúng?
Tóm lại dữ liệu là: "(cac ký tự bất kỳ)(ký tự phân cách - là gì?)THÔN(các ký tự phân cách - là gì?)XÃ"?
Bạn thử cái này, (mặc dù tốc độ không tốt nhưng dữ liệu của bạn ...lung tung quá)
Mã:
Sub tach()
Dim Arr, ArrXaThon
Dim i, j, eR As Integer
Arr = Sheet2.Range("A1:B" & Sheet2.[b65536].End(xlUp).Row)
eR = Sheet1.[A65536].End(xlUp).Row
ReDim ArrXaThon(1 To eR, 1 To 2)
For i = 1 To eR
For j = 1 To UBound(Arr, 1)
If InStr(1, Sheet1.Cells(i, 1), Arr(j, 2)) > 0 Then
If InStr(1, Sheet1.Cells(i, 1), Arr(j, 1)) > 0 Then
ArrXaThon(i, 1) = Arr(j, 1)
ArrXaThon(i, 2) = Arr(j, 2)
Else
ArrXaThon(i, 2) = Arr(j, 2)
End If
End If
Next
Next
Sheet1.[e1].Resize(UBound(ArrXaThon, 1), 2) = ArrXaThon
End Sub
Bạn thử cái này, (mặc dù tốc độ không tốt nhưng dữ liệu của bạn ...lung tung quá)
Mã:
Sub tach()
Dim Arr, ArrXaThon
Dim i, j, eR As Integer
Arr = Sheet2.Range("A1:B" & Sheet2.[b65536].End(xlUp).Row)
eR = Sheet1.[A65536].End(xlUp).Row
ReDim ArrXaThon(1 To eR, 1 To 2)
For i = 1 To eR
For j = 1 To UBound(Arr, 1)
If InStr(1, Sheet1.Cells(i, 1), Arr(j, 2)) > 0 Then
If InStr(1, Sheet1.Cells(i, 1), Arr(j, 1)) > 0 Then
ArrXaThon(i, 1) = Arr(j, 1)
ArrXaThon(i, 2) = Arr(j, 2)
Else
ArrXaThon(i, 2) = Arr(j, 2)
End If
End If
Next
Next
Sheet1.[e1].Resize(UBound(ArrXaThon, 1), 2) = ArrXaThon
End Sub
Mình thấy code thế này ổn nè, các bạn test xem. Nhưng nếu đúng như anh Siwtom phân tích thì sẽ chả có code nào đúng nổi đâu. Hic, bài này cũng vui chứ.
PHP:
Sub tach()
Dim dl1(), dl2(), kq(), i As Long, j As Long
dl1 = Sheet1.Range(Sheet1.[a2], Sheet1.[A65536].End(3)).Value
dl2 = Sheet2.Range(Sheet2.[a2], Sheet2.[b65536].End(3)).Value
ReDim kq(1 To UBound(dl1), 1 To 2)
For j = 1 To UBound(dl1)
For i = 1 To UBound(dl2)
If InStr(dl1(j, 1), dl2(i, 2)) Then
kq(j, 1) = dl2(i, 2)
Exit For
End If
Next
For i = 1 To UBound(dl2)
If InStr(dl1(j, 1), dl2(i, 1)) Then
kq(j, 2) = dl2(i, 1)
Exit For
End If
Next
Next
Sheet1.[B2].Resize(j - 1, 2) = kq
End Sub
Phân tích của bác Siwtom hay quá, quả là khi có những trường hợp đặc biệt (tên xã = tên thôn) thì khi dùng Instr cho Arr(j,1) hay Arr(j,2) cũng đều cho kết quả nếu chuỗi có ký tự đó, dẫn tới sai.
Vậy nếu cho so sánh cả 2 Thôn và Xã cùng 1 lúc thì có được không ạ?
Mã:
Sub tach()
Dim Arr, ArrXaThon
Dim i, j, eR As Integer
Arr = Sheet2.Range("A2:B" & Sheet2.[b65536].End(xlUp).Row)
eR = Sheet1.[A65536].End(xlUp).Row
ReDim ArrXaThon(1 To eR, 1 To 2)
For i = 2 To eR
For j = 1 To UBound(Arr, 1)
If InStr(1, Sheet1.Cells(i, 1), Arr(j, 2)) > 0 And InStr(1, Sheet1.Cells(i, 1), Arr(j, 1)) > 0 Then
ArrXaThon(i, 1) = Arr(j, 1)
ArrXaThon(i, 2) = Arr(j, 2)
Exit For
ElseIf InStr(1, Sheet1.Cells(i, 1), Arr(j, 2)) > 0 Then
ArrXaThon(i, 2) = Arr(j, 2)
End If
Next
Next
Sheet1.[c1].Resize(UBound(ArrXaThon, 1), 2) = ArrXaThon
End Sub
(Bài bác QuangHai hình như cũng có vấn đề khi dữ liệu trùng nhau, bác kiểm tra lại xem)
Mình thấy code thế này ổn nè, các bạn test xem. Nhưng nếu đúng như anh Siwtom phân tích thì sẽ chả có code nào đúng nổi đâu. Hic, bài này cũng vui chứ.
PHP:
Sub tach()
Dim dl1(), dl2(), kq(), i As Long, j As Long
dl1 = Sheet1.Range(Sheet1.[a2], Sheet1.[A65536].End(3)).Value
dl2 = Sheet2.Range(Sheet2.[a2], Sheet2.[b65536].End(3)).Value
ReDim kq(1 To UBound(dl1), 1 To 2)
For j = 1 To UBound(dl1)
For i = 1 To UBound(dl2)
If InStr(dl1(j, 1), dl2(i, 2)) Then
kq(j, 1) = dl2(i, 2)
Exit For
End If
Next
For i = 1 To UBound(dl2)
If InStr(dl1(j, 1), dl2(i, 1)) Then
kq(j, 2) = dl2(i, 1)
Exit For
End If
Next
Next
Sheet1.[B2].Resize(j - 1, 2) = kq
End Sub
Em có đọc phân tích của anh nên mới đầu hàng bài này vì cơ hội hoàn chỉnh code cho bài này đối với em là không tưởng rồi
Bởi vậy em mới nói là nếu đúng như anh siwtom phân tích thì khó có code nào đúng nổi mà
Em có đọc phân tích của anh nên mới đầu hàng bài này vì cơ hội hoàn chỉnh code cho bài này đối với em là không tưởng rồi
Bởi vậy em mới nói là nếu đúng như anh siwtom phân tích thì khó có code nào đúng nổi mà