Vấn đề chuỗi trong Excel?

Liên hệ QC

simbat

Thành viên mới
Tham gia
6/9/06
Bài viết
6
Được thích
0
CAC PAC CHO I KIEN

EM CO BAI TOAN NHU THE NAY MA NGHI 3 THANG CHUA RA DC
MONG CAC PAC CHI GIAO-\\/.

COLUM1
4 ngach 34 ngo 10B hang ga ha noi
13 ngo 15 hang than
Duong tran phu so nha 7 P405 ha noi
kiot 24 cho 19/2
2345 de la thanh ha noi
24 hem 11 thanh xuan ha noi

+-+-+-+ pác nào giúp em phan loai được cột số nhà ,cột đường ,cột ngõ....hay các thông số khác ,đại khái thêm vài cột nữa bằng các hàm hay marco được không,chứ phân loại bằng tay,em sắp chết rùi *****
thanks and i love you :-=:clap2:
 
Lần chỉnh sửa cuối:
Tôi thấy vấn đề này rất phức tạp vì dữ liệu đầu vào tùy hứng, không theo quy luật nào cả. Để làm được thì thuật toán tương đối phức tạp, vì phải nhận biết từng đối tượng như số nhà, ngõ, ngách, đường phố, tỉnh,... *****
 
ThanhThao đã viết:
Tôi thấy vấn đề này rất phức tạp vì dữ liệu đầu vào tùy hứng, không theo quy luật nào cả. Để làm được thì thuật toán tương đối phức tạp, vì phải nhận biết từng đối tượng như số nhà, ngõ, ngách, đường phố, tỉnh,... *****
Tôi đồng ý với ThanhThao. Chẳng có thuật toán nào để thực hiện theo yêu cầu của bạn. Có chăng chỉ là "giả" mà thôi.

Lê Văn Duyệt
 
Dear all,
--------
Theo em chỉ còn một cách là simbat chịu khó phân tách địa chỉ bởi một dấu hiệu một cách thủ công sau đó lưu lại workbook này dưới dạng *.txt.
Sử dụng chức năng Data/Import dựa vào dấu hiệu phân tách đó chúng ta sẽ phân chia các thành phần của địa chỉ ra từng cột.
Kết quả chỉ là tương đối, việc phân chính xác phụ thuộc vào thứ tự các thành phần trong địa chỉ.
Sau đây là một ví dụ!
 

File đính kèm

  • Comma.zip
    2.7 KB · Đọc: 373
Theo tôi chỉ có cách là dùng Sub chia tách các đối tượng, mỗi cái vào 1 ô riêng, cơ sở là dựa vào " " giữa các đối tượng. Sau đó thủ công mà liên kết thôi. !$@!! !$@!! !$@!!
 
Theo tôi, cần biết cấu trúc dữ liệu mà bạn cần là gì:
So nha - Ngach - Ngo - Hem - Kiot - cho - Pho -Phuong - Quan (Huyen) -Thanhpho ???

Mỗi cái Tu khóa (VD : So nha ) coi nó là delimiter va gặp delimiter thì lấy dữ liệu ở khoảng giữa
 
LearnExcel đã viết:
Theo tôi, cần biết cấu trúc dữ liệu mà bạn cần là gì:
So nha - Ngach - Ngo - Hem - Kiot - cho - Pho -Phuong - Quan (Huyen) -Thanhpho ???

Mỗi cái Tu khóa (VD : So nha ) coi nó là delimiter va gặp delimiter thì lấy dữ liệu ở khoảng giữa


Cái này sắp xếp lộn xộn, ngẫu hứng, nếu theo quy luật thì không khó.
 
Đào Việt Cường đã viết:
Dear all,
--------
Theo em chỉ còn một cách là simbat chịu khó phân tách địa chỉ bởi một dấu hiệu một cách thủ công sau đó lưu lại workbook này dưới dạng *.txt.
Sử dụng chức năng Data/Import dựa vào dấu hiệu phân tách đó chúng ta sẽ phân chia các thành phần của địa chỉ ra từng cột.
Kết quả chỉ là tương đối, việc phân chính xác phụ thuộc vào thứ tự các thành phần trong địa chỉ.
Sau đây là một ví dụ!
Nếu mà có một dấu hiệu nào đó thì thật là đơn giản. Trong bộ công cụ của Excel đã làm được việc này rất tốt (dựa vào một dấu hiệu nào đấy hoặc cắt theo chiều dài - VD cắt 3, 5, 8 : tức là chia thành 3 cột : cột 1 gồm 3 ký tự, cột 2 gồm 2 ký tự tiếp theo, cột 3 gồm 3 ký tự tiếp theo).
Data->Text to Columns...

Nhưng dù sao với cách sắp xếp lộn xộn không theo qui luật thì không thể làm được trừ khi làm thủ công. (Lập trình được là do dựa vào qui luật, không có quy luật thì lập trình cũng chịu.)
 
Lần chỉnh sửa cuối:
MrHieu đã viết:
Nhưng dù sao với cách sắp xếp lộn xộn không theo qui luật thì không thể làm được trừ khi làm thủ công. (Lập trình được là do dựa vào qui luật, không có quy luật thì lập trình cũng chịu.)
Bạn Hiếu nói đúng quá.

Tôi có vấn đề cũng đơn giản như sau bạn lọc giúp.

Cơ sở dữ liệu kiểu như sau:
..... text, number ..... site:huuhao .... text, number ..... Diachi:1234 ... text, number ...

Qui luật tôi cần lọc 1 danh sách gồm 2 cột:
Cột 1: chứa chuỗi kí tự sau "site:" (dấu hiệu kết thúc là dấu cách).
Cột 2: chứa chuỗi kí tự, hoặc số sau "Diachi:" tương ứng (dấu hiệu kết thúc là dấu cách).

Còn dữ liệu text, num ... hổ lốn xen kẽ trong đó thì bỏ qua. Xin lỗi sinbat mình chen ngang 1 tý.
 
Chuotdong đã viết:
Bạn Hiếu nói đúng quá.

Tôi có vấn đề cũng đơn giản như sau bạn lọc giúp.

Cơ sở dữ liệu kiểu như sau:
..... text, number ..... site:huuhao .... text, number ..... Diachi:1234 ... text, number ...

Qui luật tôi cần lọc 1 danh sách gồm 2 cột:
Cột 1: chứa chuỗi kí tự sau "site:" (dấu hiệu kết thúc là dấu cách).
Cột 2: chứa chuỗi kí tự, hoặc số sau "Diachi:" tương ứng (dấu hiệu kết thúc là dấu cách).

Còn dữ liệu text, num ... hổ lốn xen kẽ trong đó thì bỏ qua. Xin lỗi sinbat mình chen ngang 1 tý.
Như mình đã trình bày, ta hoàn toàn có thể dựa vào công cụ Text to Columns....
Vì bạn chia một đoạn ra thành 4 đoạn :
..... text, number ..... site:huuhao .... text, number ..... Diachi:1234 ... text, number ...
nên ta phải tách 2 lần. Nhưng vì công cụ có thể chia một lần tối đa thành 6 cột và chỉ có tác dụng với các ký tự sau :

sks;sd
asajs_ndss,c
1. Dấu tab
2. Dấu Space
3. Dấu Semicolon ;
4. Dấu comma ,
5. Và một ký tự bất kỳ.


Còn nếu trong đoạn text đã có quá nhiều dấu hiệu trùng thì ta thực hiện 1 tiểu xảo nữa là tiến hành thay thế (Ctrl + H)
a.Space->))
b.Semicolon->((
c.Comma->[[

................
...... Ví dụ vậy thôi.

Và thực hiện tiếp một tiểu xảo nữa


1. Biến site: -> site:+ một dấu hiệu nào đấy trong 5 dấu hiệu trên không trùng với những dấu hiệu trong đoạn text (VN site:;)
2. Biến Diachi: -> 1 dấu hiệu nào đấy+Diachi: + 1 dấu hiệu nào đấy
trong 5 dấu hiệu trên không trùng với những dấu hiệu trong đoạn text
Và cả 3 dấu hiệu này là khác nhau.

Sau đó ta tiến hành phân cột.
Nhớ là phaie trả lại các ký tự cũ của nó nếu bạn đã replace (Ctrl +H)
Quá đơn giản phải không bạn.
Thân !
 
Lần chỉnh sửa cuối:
Theo mình thì cách sắp xếp lỗn xộn sẽ khắc phục được nếu đặt một số từ khoá trước (số, ngõ, ngách, đường, phố, quận, huyện,...)
VD: S 250 đường Đê La Thành quận .....
Số 250 ngõ 3 ngách 5 đường ......
 
MrHieu đã viết:
Như mình đã trình bày, ta hoàn toàn có thể dựa vào công cụ Text to Columns....
Vì bạn chia một đoạn ra thành 4 đoạn :
..... text, number ..... site:huuhao .... text, number ..... Diachi:1234 ... text, number ...
nên ta phải tách 2 lần. Nhưng vì công cụ có thể chia một lần tối đa thành 6 cột và chỉ có tác dụng với các ký tự sau :
sks;sd
asajs_ndss,c
Cám ơn bạn tôi sẽ nghiên cứu kĩ hơn để áp dụng, nhưng không biết bạn có hiểu lầm không dữ liệu của tôi là một hoặc vài chục trang dạng text chưa được phân đoạn như bạn nghĩ. Có nghĩa là chuỗi :
... site:xxx .... text, number ..... Diachi:#### ... text, number site:xxx .... text, number ..... Diachi:#### ... text, numbersite:xxx .... text, number ..... Diachi:#### ... text, number .v.v...

"text, number" ở đây có thể là bất kì chuỗi kí tự gì kể cả site, Diachi nhưng nếu sau Site không phải là Diachi thì cũng ko phải lọc ra
và được lặp đi lặp lại gần như vô tận--=0

Nên tôi chỉ cần "quan sát" các text sau Site và sau Diachi (thống kê tương ứng với nhau)
 
Chuotdong đã viết:
Cám ơn bạn tôi sẽ nghiên cứu kĩ hơn để áp dụng, nhưng không biết bạn có hiểu lầm không dữ liệu của tôi là một hoặc vài chục trang dạng text chưa được phân đoạn như bạn nghĩ. Có nghĩa là chuỗi :
... site:xxx .... text, number ..... Diachi:#### ... text, number site:xxx .... text, number ..... Diachi:#### ... text, numbersite:xxx .... text, number ..... Diachi:#### ... text, number .v.v...

"text, number" ở đây có thể là bất kì chuỗi kí tự gì kể cả site, Diachi nhưng nếu sau Site không phải là Diachi thì cũng ko phải lọc ra
và được lặp đi lặp lại gần như vô tận--=0

Nên tôi chỉ cần "quan sát" các text sau Site và sau Diachi (thống kê tương ứng với nhau)
Công cụ Text to Columns chỉ có tác dụng như thế. Nó cứ cắt cả đoạn cho đến dấu hiệu thứ nhất là cột đầu tiên và cứ thế....
Nhưng nếu nó lộn xộn như bác nói thì mình nghĩ dùng công thức để tách ra cũng được. Hãy thử cho VD xem sao.
Thân !

Vậy thì có lẽ Bác phải dùng công thức để cắt
 
thanhk

chu de nay to da gui cach day chung 3 thang rui -+*/
cam on cac ban
to hien nay dang dung cach nay:
VD: chuoi co dang:123(or so nha 123 or so 123)phong 203(or p203) ngo 12 ngach 3 duong tran nhat duat .
To loc tung cot mot vay ,chai!!
vi du loc truong so nha :
to loc tu trai wa phai xet tu dau den cuoi chuoi va xet tung chuoi con trong chuoi lon, chuoi dang xet o day gom 9 chuoi con duoc phan cach nhau bang dau cach(vi cau truc chuoi cua to 95% duoc phan cach nhau bang dau cach)
* lay chuoi con dau tien nao co chua so.(duoc khoang 70-80%)con lai loc bang tay thu cong --=0
loc truong ngo ngach hem to cum...:
* loc cot ngo:
to cung loc tu trai wa phai cac chuoi con,neu gap chuoi nao chua tu "ngo" se lay gia tri cua chuoi con sau do : chuoi" ngo "la:n thi chuoi sau se la n+1
.Tuong tu minh se loc dc cac cot ngach,to,hem,khu,cum...
* loc truong phong :
to chia ra lam 2 truong hop:
phong x va px
va lay cac gia tri tuong tu nhu o tren

Tren day la cach lam cua to,cac pac cho y kien chi dao nha }}}}}
 
Help me

Mình có một ô chứa biểu thức : 2m*5thanh+2m*2thanh*3tru
Mình muốn ô bên cạnh sẽ là : 2*5+2*2*3=22
Ai biet chi dum
 
tanshan1 đã viết:
Mình có một ô chứa biểu thức : 2m*5thanh+2m*2thanh*3tru
Mình muốn ô bên cạnh sẽ là : 2*5+2*2*3=22
Ai biet chi dum

Cái này phải dùng VBA thôi.
 
Bạn xem đoạn Code này & nếu không sửa được sẽ có người giúp tiếp

Bạn nghiên cứu & sửa lại các dòng lệnh 13 & 35 í!
Mã:
[b]Function NumExtract(Rng As Range, Optional TDecimal As Boolean, Optional TNegative As Boolean) [/b]
    
    Dim vVal, iDem As Integer, iJ As Integer, iDai As Integer
    Dim StrC As String, StrNeg As String, StrDec As String, SNum As String
    
    StrC = Rng
    If TDecimal = True And TNegative = True Then
        StrNeg = "-":                   StrDec = "."
    ElseIf TDecimal = True And TNegative = False Then
        StrNeg = vbNullString:          StrDec = "."
    ElseIf TDecimal = False And TNegative = True Then
        StrNeg = "-":                   StrDec = vbNullString
    End If
    iDai = Len(StrC)
    For iDem = iDai To 1 Step -1
        vVal = Mid(StrC, iDem, 1)
        If IsNumeric(vVal) Or vVal = StrNeg Or vVal = StrDec Then
            iJ = iJ + 1
            SNum = Mid(StrC, iDem, 1) & SNum
            If IsNumeric(SNum) Then
                If CDbl(SNum) < 0 Then Exit For
            Else
13              SNum = Replace(SNum, Left(SNum, 1), "", , 1)
        End If:                End If
        If iJ = 1 And SNum <> vbNullString Then SNum = CDbl(Mid(SNum, 1, 1))
    Next iDem
35    NumExtract = CDbl(SNum)
     
[b]End Function[/b]
 
Vấn đề của mình đơn giản hơn nhưng mình cũng không giải được, nhờ các bạn giúp nhé. Mình muốn tất cả các ký tự sau dấu phẩy cuối cùng được chuyển sang cột mới. VD: 323 Hoàng Văn Thụ, quận Hoàn Kiếm, Hà Nội, Mình muốn chữ Hà Nội được chuyển sang colum mới thì phải làm thế nào. Cảm ơn các bạn
 
Dùng như vầy được không bạn?
PHP:
Function Tachdiachi(diachi As String, Optional Vitri As Byte = 1) As String
' Po_PiKachu
'Vtri = 1: duong ; Vtri = 2: quan ; Vtri = 3: thanh pho
    Dim arr() As String
    arr() = Split(diachi, ", ")
    Tachdiachi = Choose(Vitri, arr(0), arr(1), arr(UBound(arr)))
End Function
Ví dụ ô A1 có dữ liệu như bạn thì các ô các tách như sau:
Đường =Tachdiachi(A1)
Quận =Tachdiachi(A1,2)
Thành phố =Tachdiachi(A1,3)
Thân.
 
Web KT
Back
Top Bottom