Lấy ra những kí tự số trong 1 dãy kí tự

  • Thread starter Thread starter thanhaka
  • Ngày gửi Ngày gửi
Liên hệ QC

thanhaka

Thành viên mới
Tham gia
4/11/07
Bài viết
12
Được thích
0
Nghề nghiệp
Student
Mình có 1 dãy kí tự. VD: SSCD287; SSJKF34; KF8; HSCI5783 . Mình muốn lấy ra 3 kí tự số cua SSCD287 là 287 ; 2 kí tự số của SSJKF34 là 34; 1 kí tự số cua KF8 là 8; 4 kí tự số cuối cùng cua HSCI5783 là 5783, và định dạng của chúng là số. Cứ nhìn thấy số là lấy ra số. (Chỉ dùng 1 công thức thôi nha, vì có nhiều dãy kí tự lắm bạn ạ). Bạn nào biết viết công thức thì chỉ mình với. Mình cảm ơn nhiều!
 
Bạn xem trong file đính kèm công thức mảng, nếu vẫn chưa đáp ứng nhu cầu thì cần phải viết hàm tự tạo.

TP.
 

File đính kèm

Nếu dữ liệu định dạng như của bạn thì bài của Ttphong2007 đáp ứng được, nếu ký tự xen lẫn số thì không chính xác.
 
Cái này dùng VBA thì cực dễ, nhưng nếu như bạn chắc chắn rằng số cần tách luôn luôn nằm bên phải của chuổi thì tôi cũng có 1 cách dùng công thức...
Một công thức duy nhất và 1 name duy nhất...
Xem file nhé!
ANH TUẤN
 

File đính kèm

Cái cũa bạn ttphong2007 vẫn chưa định dạng number đâu nha... muốn dc vậy thì lấy công thức ấy nhân với 1 nữa...
ANH TUẤN
 
Nếu chuyển thành số thì dùng VALUE. Pro..hơn và tốc độ nhanh hơn *1. Bác Tuấn làm nốt file bằng code đi cho anh em học hỏi tý.
 
PHP:
Function CtoN(Mystr As String, Optional Dautp As String) As Double
Dim Kqng, Kqtp, Neg  As Double, Kqtam As String
Dim Sotp As Double, Le As Byte
Neg = 1
Le = 0
For i = 1 To Len(Mystr)
    tam = Mid(Mystr, i, 1)
    Select Case tam
        Case 0 To 9
            Kqtam = Kqtam & tam
        Case "-"
            Neg = -1
        Case Dautp
            Kqng = Kqtam
            Le = 1
            Mystr = Right(Mystr, Len(Mystr) - i)
            Kqtp = CtoN(Mystr)
            Sotp = Kqtp * 10 ^ (-Len(Mystr))
        End Select
Next i
Select Case Le
Case 0
CtoN = Kqtam
Case 1
CtoN = Kqng + Sotp
End Select
CtoN = CtoN * Neg
End Function
Cái này đọc luôn số thập phân, chấp luôn chữ nằm ở đầu hay đuôi, hay nằm xen kẽ lẫn lộn
Dấu thập phân là gì phải cho vào tham số dautp
 
thanhaka đã viết:
Mình có 1 dãy kí tự. VD: SSCD287; SSJKF34; KF8; HSCI5783 . Mình muốn lấy ra 3 kí tự số cua SSCD287 là 287 ; 2 kí tự số của SSJKF34 là 34; 1 kí tự số cua KF8 là 8; 4 kí tự số cuối cùng cua HSCI5783 là 5783, và định dạng của chúng là số. Cứ nhìn thấy số là lấy ra số. (Chỉ dùng 1 công thức thôi nha, vì có nhiều dãy kí tự lắm bạn ạ). Bạn nào biết viết công thức thì chỉ mình với. Mình cảm ơn nhiều!

nếu dữ liệu có đặc thù thế này thì dùng công thức trích là hợp lý - và có thể dùng hàm VALUE(RIGHT(<...>,...) là được

ptm0412 đã viết:
Cái này đọc luôn số thập phân, chấp luôn chữ nằm ở đầu hay đuôi, hay nằm xen kẽ lẫn lộn
Dấu thập phân là gì phải cho vào tham số dautp
cám ơn ptm0412, rất hay với bài đặc thù này
Nhưng nó chỉ trích 1 số thì phải, nếu chuỗi ký tự có nhiều số thì ko tách hết (?) - hơi tham tổng quát 1 tí
 
phamnhukhang đã viết:
Nếu chuyển thành số thì dùng VALUE. Pro..hơn và tốc độ nhanh hơn *1. Bác Tuấn làm nốt file bằng code đi cho anh em học hỏi tý.
Nếu bạn thích thế thì vào Define Name, chổ nào có *1 sữa lại thành VALUE đứng trước
Cụ thễ sữa name VT thành
Mã:
=MATCH(FALSE,ISNUMBER(VALUE(RIGHT(Sheet1!$A2,ROW(INDIRECT("1:"&LEN(Sheet1!$A2)))))),0)-1
Công thức thì sữa lại thành
Mã:
=VALUE(RIGHT(A2,VT))
ANH TUẤN
 
cám ơn ptm0412, rất hay với bài đặc thù này
Nhưng nó chỉ trích 1 số thì phải, nếu chuỗi ký tự có nhiều số thì ko tách hết (?) - hơi tham tổng quát 1 tí
Thêm tí: Nó đọc luôn số âm
Lỗi của nó lại là đọc hết mới chết! Chữ mà xen kẽ bất kỳ ở đâu nó cũng vất đi và nối tất cả số lại!
Cái này mình viết để đọc số kèm đơn vị tính lấy từ nguồn ngoài Excel; hoặc bị dính 2 trường dữ liệu: 1 chữ 1 số .Trường hợp này là phổ biến .
Còn dữ liệu ghép 3 trường trở lên là hơi hiếm .
Tuy nhiên mình sẽ thử!
 
Giả sử có trường như sau:
1/ Doanh so vung Bac 123456789 987654321 1111111110
Vậy bạn có mã công thức nào để tách dữ liệu thành: 123456789 987654321 1111111110 có nghĩa là bỏ qua " 1/ Doanh so vung Bac " và tách ba số bởi dấu cách không?
Cảm ơn bạn
 
Mình có giải pháp này
Mã:
 Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
        FieldInfo:=Array(Array(0, 1), Array(20, 1), Array(40, 1)), TrailingMinusNumbers _
        :=True
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "=RC[-3]&RC[-2]&"" ""&RC[-1]"
 
Mình đã thử, nhưng không có cách nào là được.
Theo ttphong2007 thì, mình thêm "value" vao thì lại bị lỗi. không hiểu nổi?
Theo anh Tuan thì mình lại chẳng hiểu bạn viết vba kiểu gì, mình mở ra mà chảng thấy nó đâu cả. Mà dãy kí tự chỉ có số (354646) hoặc chỉ có chữ (sscd) thì kết quả bị lỗi. Lẽ ra chỉ có số thì trả về số, chỉ có kí tự thì trả vể 0
Nếu được xin mọi người giúp cho 1 lần nữa. Ai viết được bằng công thức thì tốt quá. Thanks
 
Nếu dữ liệu không lẫn lộn giữa số và chữ, bạn có thể dùng đoạn code sau:(xem file)
Sub tachso()
Dim i
i = 2
While Not IsEmpty(Cells(i, 1))
If Val(Cells(i, 1)) = 0 Then
Cells(i, 5) = Val(StrReverse(Cells(i, 1)))
Cells(i, 5) = StrReverse(Cells(i, 5))
Else
Cells(i, 5) = Val(Cells(i, 1))
End If
i = i + 1
Wend
End Sub
 

File đính kèm

thanhaka đã viết:
Mình đã thử, nhưng không có cách nào là được.
. . .
Lẽ ra chỉ có số thì trả về số, chỉ có kí tự thì trả vể 0
Nếu được xin mọi người giúp cho 1 lần nữa. Ai viết được bằng công thức thì tốt quá. Thanks
Nếu bạn chịu dùng hàm tự tạo, thì nó cũng là công thức:
B1=CtoN(A1)
hàm CtoN() bạn sửa câu:
CtoN=Kqtam (dòng 6 từ dưới lên)
thành:
CtoN = IIf(Kqtam = "", 0, Kqtam)
thì đạt yêu cầu có số trả về số, chỉ có ký tự thì trả về 0
 
thanhaka đã viết:
Mình có 1 dãy kí tự. VD: SSCD287; SSJKF34; KF8; HSCI5783 . Mình muốn lấy ra 3 kí tự số cua SSCD287 là 287 ; 2 kí tự số của SSJKF34 là 34; 1 kí tự số cua KF8 là 8; 4 kí tự số cuối cùng cua HSCI5783 là 5783, và định dạng của chúng là số. Cứ nhìn thấy số là lấy ra số. (Chỉ dùng 1 công thức thôi nha, vì có nhiều dãy kí tự lắm bạn ạ). Bạn nào biết viết công thức thì chỉ mình với. Mình cảm ơn nhiều!

Bạn thử ct này xem nhé:
=IF(ISERROR(VALUE(REPLACE(A2,1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A2&1234567890))-1,""))),"",VALUE(REPLACE(A2,1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A2&1234567890))-1,"")))

Code:
Function Tachso(MyEntry As String)

Do Until Not IsNumeric(MyNumber)
i = i + 1
MyNumber = Right(MyEntry, i)
Loop
Tachso = Right(MyNumber, i - 1)

End Function

Thân chào!
 

File đính kèm

thanhaka đã viết:
Mình đã thử, nhưng không có cách nào là được.
Theo ttphong2007 thì, mình thêm "value" vao thì lại bị lỗi. không hiểu nổi?
Theo anh Tuan thì mình lại chẳng hiểu bạn viết vba kiểu gì, mình mở ra mà chảng thấy nó đâu cả. Mà dãy kí tự chỉ có số (354646) hoặc chỉ có chữ (sscd) thì kết quả bị lỗi. Lẽ ra chỉ có số thì trả về số, chỉ có kí tự thì trả vể 0
Nếu được xin mọi người giúp cho 1 lần nữa. Ai viết được bằng công thức thì tốt quá. Thanks

Càng ngày càng thấy vấn đề phức tạp hơn. Đọc hoa cả mắt.

Có lẽ bạn đưa lên File của bạn, sau đó sẽ có phương pháp giải cho bạn.
Vì phương pháp thì nhiều, nhưng phù hợp nhất (với người sử dụng - cảm tính) thì lại là chuyện khác.

Thân!
 
thanhaka đã viết:
Mình đã thử, nhưng không có cách nào là được.
Theo ttphong2007 thì, mình thêm "value" vao thì lại bị lỗi. không hiểu nổi?
Theo anh Tuan thì mình lại chẳng hiểu bạn viết vba kiểu gì, mình mở ra mà chảng thấy nó đâu cả. Mà dãy kí tự chỉ có số (354646) hoặc chỉ có chữ (sscd) thì kết quả bị lỗi. Lẽ ra chỉ có số thì trả về số, chỉ có kí tự thì trả vể 0
Nếu được xin mọi người giúp cho 1 lần nữa. Ai viết được bằng công thức thì tốt quá. Thanks
Trời đất ơi... gợi ý như tôi chỉ là gợi ý.. Bạn muốn sao thì tự chế theo ý chứ...
Ví dụ nhé:
Nếu cell là số thì lấy số đó, nếu cell toàn là text chắc chắn kết quả sẽ là #VALUE
vậy bạn sẽ rào các trường hợp ấy như sau:
Mã:
=IF(ISNUMBER($A2),$A2,IF(ISERROR(RIGHT(A2,VT)*1),0,RIGHT(A2,VT)*1))
Gợi ý vẫn chỉ là gợi ý... Tự thân bạn phải vận động thì mới đúng với tinh thần của GPE... Nếu ko thì diển đàn này sẽ thành nơi sản xuất phần mềm mất... (mua thì phải mất tiền đấy)
Chú ý: trong này ko có VBA gì cả... Toàn công thức.. chẳng lẽ bạn ko thể nhận định dc sao?
Gữi file lên luôn đây... chán thế!
Mến
ANH TUẤN
 

File đính kèm

Lần chỉnh sửa cuối:
thanhaka đã viết:
Mình đã thử, nhưng không có cách nào là được.
Theo ttphong2007 thì, mình thêm "value" vao thì lại bị lỗi. không hiểu nổi?
Theo anh Tuan thì mình lại chẳng hiểu bạn viết vba kiểu gì, mình mở ra mà chảng thấy nó đâu cả. Mà dãy kí tự chỉ có số (354646) hoặc chỉ có chữ (sscd) thì kết quả bị lỗi. Lẽ ra chỉ có số thì trả về số, chỉ có kí tự thì trả vể 0
Nếu được xin mọi người giúp cho 1 lần nữa. Ai viết được bằng công thức thì tốt quá. Thanks

Oh, đúng như atuan , Mr. Okebab nói trên: Hãy tự mình lựa chọn giải pháp hợp lý trong các giải pháp trên - vì chỉ có mình mới hiểu DL của mình - phạm vi giới hạn ,....
....
 
Web KT

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

Back
Top Bottom