Bỏ ký tự đầu và cuối của chuỗi (1 người xem)

Liên hệ QC

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

baodaisoi

Thành viên mới
Tham gia
8/11/12
Bài viết
5
Được thích
0
Nghề nghiệp
Sinh viên
Tình hình là mình đã tìm các bài viết khác trong chuyên mục này mà honk thấy nên POst bài hỏi mấy bạn.
Tình hình mình cần là lấy các chuỗi số trong chuỗi:

PHP:
B4: QB102S
B5: DD33L
B6: LN8L
B7: QT9L
B8: DT150S
...
Có ai tách số từ cột B không?
Cái đề thi Tin A, nên mình nghĩ chỉ mấy cái hàm thông dụng thôi!

Cụ thể là Files đính kèm:
 

File đính kèm

Tình hình là mình đã tìm các bài viết khác trong chuyên mục này mà honk thấy nên POst bài hỏi mấy bạn.
Tình hình mình cần là lấy các chuỗi số trong chuỗi:

PHP:
B4: QB102S
B5: DD33L
B6: LN8L
B7: QT9L
B8: DT150S
...
Có ai tách số từ cột B không?
Cái đề thi Tin A, nên mình nghĩ chỉ mấy cái hàm thông dụng thôi!

Cụ thể là Files đính kèm:
Tình hình là công thức tại C4=MID(B4;3;LEN(B4)-3)
 
@vihoai: ^^'! Củm mơn bạn nhìu hen!
Gút gút!
Tại mình honk bít cái Hàm "Len", lần đầu thấy nó! :D

Có thể Stop bài này đc ùi áh! -\\/.
 
Tình hình sẳn đây hỏi @viehoai luôn nhé!

PHP:
B4: QB102SS
B5: DD33L
B6: LN8LL
B7: QT9LLLL
B8: DT150S
...

Nếu như thế thì mình làm sao tách chữ số ra được?
^^'?
 
Tình hình sẳn đây hỏi @viehoai luôn nhé!

PHP:
B4: QB102SS
B5: DD33L
B6: LN8LL
B7: QT9LLLL
B8: DT150S
...

Nếu như thế thì mình làm sao tách chữ số ra được?
^^'?

Thử vầy xem:
Mã:
=MID(B4,3,LOOKUP(10,1*MID(B4,ROW($1:$255),1),ROW($1:$255))-2)
 
Bạn đổi tất cả dấu , thành ; xem sao?!
 
Thử vầy xem:
Mã:
=MID(B4,3,LOOKUP(10,1*MID(B4,ROW($1:$255),1),ROW($1:$255))-2)
Bác giúp em lập công thức tổng quát tương tự như trên để có thể tách lấy số khi số ở bất kỳ vị trí nào và có bao nhiêu số cũng được không chỉ dành cho trường hợp số ở sau 2 ký tự như trên ??
 
Bác ndu cho em ý kiến ở bài #9 với. Vì bác là tác giả của công thức mà!
 
Bác ndu cho em ý kiến ở bài #9 với. Vì bác là tác giả của công thức mà!

Vầy thử xem:
Mã:
=MID(B4,LOOKUP(10,1*MID(B4,ROW($1:$255),1),ROW($1:$255))-COUNT(1*MID(B4,ROW($1:$255),1))+1,COUNT(1*MID(B4,ROW($1:$255),1)))
Công thức mảng nha! Phải Ctrl + Shift + Enter
 
Vầy thử xem:
Mã:
=MID(B4,LOOKUP(10,1*MID(B4,ROW($1:$255),1),ROW($1:$255))-COUNT(1*MID(B4,ROW($1:$255),1))+1,COUNT(1*MID(B4,ROW($1:$255),1)))
Công thức mảng nha! Phải Ctrl + Shift + Enter
OK bác ah
Nhưng công thức có thể làm cho 1 trường hợp như thế này không : aabh2436ngm435 (nghĩa là có 1 hoặc nhiều chữ cái xen lẫn giữa các số)!?
 
Bài toán TÁCH SỐ có cả đóng trên diễn đàn rồi (tôi post đã lâu) ---> Sao bạn không tự tìm đi
Chẳng hạn là bài này:
http://www.giaiphapexcel.com/forum/...-mừng-sinh-nhật-GPE-lần-5&p=317705#post317705

"Có cả đống" thì chắc là có nhưng tôi không tìm đọc (hơi lười) nên không biết cái tôi định nói đã có chưa. Thôi thì cứ liều vậy.

Thêm điều kiện chút: "Cho một chuỗi ký tự gồm chữ số và không chữ số (dấu ".", "," không là các dấu thập phân). Hãy tách ra các chuỗi có dạng số tự nhiên mà trong 3 chữ số đầu phải có ít nhất 1 chữ số 2"

Vd. chuỗi: "2abc+_*/?12234def1342gh234567 11289 5678 opq000223rst00289 xyz"
Kết quả: 2, 12234, 234567, 11289, 00289
-------------
VBA, công thức đều được
 
"Có cả đống" thì chắc là có nhưng tôi không tìm đọc (hơi lười) nên không biết cái tôi định nói đã có chưa. Thôi thì cứ liều vậy.

Thêm điều kiện chút: "Cho một chuỗi ký tự gồm chữ số và không chữ số (dấu ".", "," không là các dấu thập phân). Hãy tách ra các chuỗi có dạng số tự nhiên mà trong 3 chữ số đầu phải có ít nhất 1 chữ số 2"

Vd. chuỗi: "2abc+_*/?12234def1342gh234567 11289 5678 opq000223rst00289 xyz"
Kết quả: 2, 12234, 234567, 11289, 00289
-------------
VBA, công thức đều được
Một cách "xi-ma-chao" đây
Mã:
Public Function Tach(Cll As Range) As String
    Dim Re As Object, ReTim As Object, A, Kq
    Set Re = CreateObject("vbscript.regexp")
    With Re
        .Global = True
        .Pattern = "[0-9]+"
    End With
        Set ReTim = Re.Execute(Cll)
            For Each A In ReTim
                If InStr(Left(A.Value, 3), "2") Then Kq = Kq & A.Value & ", "
            Next A
    Tach = Left(Kq, Len(Kq) - 2)
End Function
Mình biết pattern có thể tìm được ngay kết quả, nhưng......cóc biết viết làm sao, nhưc cái đầu quá, tới giờ nhậu dzồi
Để tối về tính tiếp
Híc
 

File đính kèm

Một cách "xi-ma-chao" đây
Mã:
Public Function Tach(Cll As Range) As String
    Dim Re As Object, ReTim As Object, A, Kq
    Set Re = CreateObject("vbscript.regexp")
    With Re
        .Global = True
        .Pattern = "[0-9]+"
    End With
        Set ReTim = Re.Execute(Cll)
            For Each A In ReTim
                If InStr(Left(A.Value, 3), "2") Then Kq = Kq & A.Value & ", "
            Next A
    Tach = Left(Kq, Len(Kq) - 2)
End Function
Mình biết pattern có thể tìm được ngay kết quả, nhưng......cóc biết viết làm sao, nhưc cái đầu quá, tới giờ nhậu dzồi
Để tối về tính tiếp
Híc

Đang bàn về công thức mà anh!
 
Một cách "xi-ma-chao" đây
Mã:
Public Function Tach(Cll As Range) As String
    Dim Re As Object, ReTim As Object, A, Kq
    Set Re = CreateObject("vbscript.regexp")
    With Re
        .Global = True
        .Pattern = "[0-9]+"
    End With
        Set ReTim = Re.Execute(Cll)
            For Each A In ReTim
                If InStr(Left(A.Value, 3), "2") Then Kq = Kq & A.Value & ", "
            Next A
    Tach = Left(Kq, Len(Kq) - 2)
End Function
Mình biết pattern có thể tìm được ngay kết quả, nhưng......cóc biết viết làm sao, nhưc cái đầu quá, tới giờ nhậu dzồi
Để tối về tính tiếp
Híc

Vậy thì chúng ta kiên nhẫn đợi cho tới khi cuộc nhậu tàn và cái đầu bớt nhức đây.
À, dùng Instr hả. Thế thì ta phát biểu lại bài:

"Cho một chuỗi ký tự gồm chữ số và không chữ số (dấu ".", "," không là các dấu thập phân). Hãy tách ra các chuỗi có dạng số tự nhiên mà đoạn đầu - độ dài tùy ý - có dạng AA, trong đó A là 1 chuỗi chữ số"

Vd. chuỗi: "2abc+_*/?12234def1313gh234567 11119 5678 opq000223rst00289 xyz"
Kết quả: 1313, 11119, 000223, 00289
 
Vậy thì chúng ta kiên nhẫn đợi cho tới khi cuộc nhậu tàn và cái đầu bớt nhức đây.
À, dùng Instr hả. Thế thì ta phát biểu lại bài:

"Cho một chuỗi ký tự gồm chữ số và không chữ số (dấu ".", "," không là các dấu thập phân). Hãy tách ra các chuỗi có dạng số tự nhiên mà đoạn đầu - độ dài tùy ý - có dạng AA, trong đó A là 1 chuỗi chữ số"

Vd. chuỗi: "2abc+_*/?12234def1313gh234567 11119 5678 opq000223rst00289 xyz"
Kết quả: 1313, 11119, 000223, 00289

Chết anh Cò rồi. Nhậu xong phải giải bài này nha
 
Chết anh Cò rồi. Nhậu xong phải giải bài này nha
Bi giờ mới về nhà & đang on- lai
Híc, tưng quá xá cỡ, hiểu được đề bài của bạn siwtom thì mình.....chết liền
Nhưng, không có việc gì khó, chỉ sợ việc đó nó....khó thật ==> mình bị "tèo"
Híc ....3 lần, Ba Tê đâu mất tiêu rồi, hổng vô cứu bồ
 
Vậy thì chúng ta kiên nhẫn đợi cho tới khi cuộc nhậu tàn và cái đầu bớt nhức đây.
À, dùng Instr hả. Thế thì ta phát biểu lại bài:

"Cho một chuỗi ký tự gồm chữ số và không chữ số (dấu ".", "," không là các dấu thập phân). Hãy tách ra các chuỗi có dạng số tự nhiên mà đoạn đầu - độ dài tùy ý - có dạng AA, trong đó A là 1 chuỗi chữ số"

Vd. chuỗi: "2abc+_*/?12234def1313gh234567 11119 5678 opq000223rst00289 xyz"
Kết quả: 1313, 11119, 000223, 00289
Lại một cách giải "xi-ma-chao" nữa đây:
Mã:
Public Function TachNua(Cll As Range) As String
    Dim Re As Object, ReTim As Object, A, Kq, B
    Set Re = CreateObject("vbscript.regexp")
        With Re
            .Global = True
            .Pattern = "\d+"
        End With
            Set ReTim = Re.Execute(Cll)
                For Each A In ReTim
                     With Re
                        .Global = True
                        .Pattern = "(^\d+)\1"
                    End With
                        Set B = Re.Execute(A.Value)
                        If B.Count Then Kq = Kq & ", " & A.Value
                Next A
     TachNua = Right(Kq, Len(Kq) - 2)
End Function
Mày mò học cái này thấy cũng...hay hay nhưng chưa viết gọn gàng được vì chưa nắm bắt được hết cái "quỷ quái" này
Híc
Hình như pattern này viết một lần cũng được thì phải. Thôi cứ để đấy tính sau
 

File đính kèm

Thêm điều kiện chút: "Cho một chuỗi ký tự gồm chữ số và không chữ số (dấu ".", "," không là các dấu thập phân). Hãy tách ra các chuỗi có dạng số tự nhiên mà trong 3 chữ số đầu phải có ít nhất 1 chữ số 2"
Vd. chuỗi: "2abc+_*/?12234def1342gh234567 11289 5678 opq000223rst00289 xyz"
Kết quả: 2, 12234, 234567, 11289, 00289
-------------
VBA, công thức đều được

Mã:
Sub test()
Dim re As Object, match As Object, s As String, tmp As String
    s = "2abc+_*/?12234def1342gh234567 11289 5678 opq000223rst00289 xyz"
    Set re = CreateObject("vbscript.regexp")
    With re
        .Global = True
        .Pattern = "(?=(\D|^)\d{0,2}2)\1(\d+)"
    End With
    For Each match In re.Execute(s)
        tmp = tmp & match.SubMatches.Item(1) & ", "
    Next match
    MsgBox Left(tmp, Len(tmp) - 2)
End Sub
 
Lần chỉnh sửa cuối:
Vậy thì chúng ta kiên nhẫn đợi cho tới khi cuộc nhậu tàn và cái đầu bớt nhức đây.
À, dùng Instr hả. Thế thì ta phát biểu lại bài:
"Cho một chuỗi ký tự gồm chữ số và không chữ số (dấu ".", "," không là các dấu thập phân). Hãy tách ra các chuỗi có dạng số tự nhiên mà đoạn đầu - độ dài tùy ý - có dạng AA, trong đó A là 1 chuỗi chữ số"
Vd. chuỗi: "2abc+_*/?12234def1313gh234567 11119 5678 opq000223rst00289 xyz"
Kết quả: 1313, 11119, 000223, 00289

Mã:
Sub test1()
Dim re As Object, match As Object, s As String, tmp As String
    s = "2abc+_*/?12234def1313gh234567 11119 5678 opq000223rst00289 xyz"
    Set re = CreateObject("vbscript.regexp")
    With re
        .Global = True
        .Pattern = "(?=(\D|^)(\d+)\2)\1(\d+)"
    End With
    For Each match In re.Execute(s)
        tmp = tmp & match.SubMatches.Item(2) & ", "
    Next match
    MsgBox Left(tmp, Len(tmp) - 2)
End Sub
 
Lần chỉnh sửa cuối:
Đọc code của anh Siwtom xong muốn nghỉ học VBA luôn vì thấy rằng cả đời này chắc không tài nào làm được như vậy.
Nhưng nghĩ lại thì học tiếp vì thực tế ít khi nào gặp dạng phức tạp thế này. Mà nếu có gặp thì làm ngơ cho chắc ăn
Tạm thời cứ copy code và phần giải thích về lưu trong máy cái đã.
 
Đọc code của anh Siwtom xong muốn nghỉ học VBA luôn vì thấy rằng cả đời này chắc không tài nào làm được như vậy.
Nhưng nghĩ lại thì học tiếp vì thực tế ít khi nào gặp dạng phức tạp thế này. Mà nếu có gặp thì làm ngơ cho chắc ăn
Tạm thời cứ copy code và phần giải thích về lưu trong máy cái đã.

Tất cả chỉ là kiến thức như mọi kiến thức trong nhà trường thôi mà. Nếu ai có nhu cầu thì "công cụ" đã có chỉ việc dùng.
 
Lần chỉnh sửa cuối:

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

Back
Top Bottom