mhung12005
Thành viên chậm chạm
- Tham gia
- 20/7/11
- Bài viết
- 1,598
- Được thích
- 1,261
- Nghề nghiệp
- Đâu có việc thì làm
dùng công thức mảng nàyxin chào các anh chị !
Em có bài toán (như trong file đính kèm) vượt quá khả năng. Em muốn nhờ các anh chi giúp đỡ giải hoặc đưa ra giải pháp giúp em.
Em xin chân thành cảm ơn.
=mid($d5,large(if(isnumber(--mid($d5,row(indirect("1:"&len($d5))),1)),row(indirect("1:"&len($d5))),""),1)+1,len($d5))
dùng công thức mảng này
PHP:=mid($d5,large(if(isnumber(--mid($d5,row(indirect("1:"&len($d5))),1)),row(indirect("1:"&len($d5))),""),1)+1,len($d5))
tạm giai thích n hư saugửi bạn lê duy thương !
Thật sự xin bái phục. Mình lại làm phiền bạn lần nữa. Bạn có thể giải thích cho mình hiểu mấu chốt của vấn đề là gì không ?
Hoặc giải thích công thức của bạn.
Chân thành cảm ơn bạn.
tạm giai thích n hư sau
1 dùng hàm if kết hợp với isnumber và mid để xét từng ký tự trong chuỗi từ trái qua phải xem ký tự nào là số thì gán cho nó là vị trí thứ tự của ký tự số đó . Ký tự nào ko phải là số thì thay = "".
2- dùng hàm large để lấy vị trí sau cùng của ký tự số.
3-dùng lại hàm mid để lấy những ký tự đứng sau ký tự số sau cùng
do tôi không có kỹ năng sư phạm như lão sư phụ chết tiệt nên giải thích cũng khó hiểu.để hiểu thêm bạn nên học thuộc những hàm mà tôi đã kết hợp thì sẽ dễ hiểu hơn
chúc bạn nhanh chóng thành công
Ngắn hơn nè :Xin cảm ơn bạn !
Các hàm mà bạn đã dùng thực ra mình cũng biết dùng nó (chỉ dùng đơn lẻ) nhưng cách sử dụng trên dữ liệu mảng thì mình không rành lắm. Xin hỏi bạn có phương pháp gì để có thể học cách sử dụng mảng nhanh và chính xác không. Xin bạn chia sẻ. Xin cảm ơn.
=RIGHT(D5,LEN(D5)-MATCH(1,-MID(D5,ROW($1:$99),1)))
=RIGHT(D5,LEN(D5)-LOOKUP(1,-MID(D5,ROW($1:$99),1),ROW($1:$99)))
Giả sử bạn có chuỗi SDFG658SR tại ô A1.Xin cảm ơn bạn !
Các hàm mà bạn đã dùng thực ra mình cũng biết dùng nó (chỉ dùng đơn lẻ) nhưng cách sử dụng trên dữ liệu mảng thì mình không rành lắm. Xin hỏi bạn có phương pháp gì để có thể học cách sử dụng mảng nhanh và chính xác không. Xin bạn chia sẻ. Xin cảm ơn.
Giả sử bạn có chuỗi SDFG658SR tại ô A1.
Muốn tách SR ra thì bạn phải xác định giá trị số cuối cùng trong chuỗi.
Muốn vậy bạn phải tạo mảng chứa từng ký tự trong chuỗi.
Thử làm thủ công:
MID(A1,1,1)= "S"
MID(A1,2,1)= "D"
MID(A1,3,1)= "F"
...
MID(A1,9,1)= "R"
Bạn sẽ thấy các con số màu đỏ tuân theo quy luật: dãy số nguyên từ 1 tới LEN(A1) = ROW(INDIRECT("1:"&LEN(A1)))
Như vậy, MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1) = MID(A1,{1,2,3,...,9},1)= "S","D","F","G","6","5","8","S","R" (gọi tắt là "Chuỗi")
ISNUMBER(--"Chuỗi") = FALSE,FALSE,FALSE,FALSE,TRUE,TRUE,TRUE,FALSE,FALSE (Hai dấu trừ để biến Text thành giá trị số)
So sánh với ROW(INDIRECT("1:"&LEN(A1))) = {1,2,3,4,5,6,7,8,9}, để gán thứ tự cho các giá trị số:
IF(ISNUMBER(--"Chuỗi")),ROW(INDIRECT("1:"&LEN(A1))),"") = {"","","","",5,6,7,"",""}
Dùng MAX hoặc LARGE để lấy số 7 là vị trí của số cuối cùng, +1 có vị trí ký tự kế tiếp.
Dùng MID sẽ ra được chuỗi ký tự phía sau
Vầy còn ngắn hơn:Ngắn hơn nè :
Nếu kết thúc bằng Ctrl+Shift+EnterPHP:=RIGHT(D5,LEN(D5)-MATCH(1,-MID(D5,ROW($1:$99),1)))
Hoặc :
Kết thúc với Enter nhé!PHP:=RIGHT(D5,LEN(D5)-LOOKUP(1,-MID(D5,ROW($1:$99),1),ROW($1:$99)))
=REPLACE(D5,1,MATCH(1,-MID(D5,ROW($1:$99),1)),"")
Cảm ơn sư phụ, bao giờ sư phụ cũng là người đưa ra giải pháp ngắn nhất, he he!Vầy còn ngắn hơn:
Ẹc... Ẹc...PHP:=REPLACE(D5,1,MATCH(1,-MID(D5,ROW($1:$99),1)),"")
DL=Sheet1!$D5
DK=IF(ISNUMBER(1*MID(DL;ROW(INDIRECT("1:"&LEN(DL)));1));ROW(INDIRECT("1:"&LEN(DL)));"")
=MID(DL;MAX(DK)+1;LEN(DL))
đúng là ngắn thậtbấy lâu nay tôi cứ đi tìm cái xa xôi mà quên đi cái gần trước mắt.NDU đúng là quái kiệt của GPE30/4--1/5 nghỉ 3 ngày chắc phải ốp la thôi anh Tuấn nhỉẹc ẹcVầy còn ngắn hơn:Ẹc... Ẹc...PHP:=REPLACE(D5,1,MATCH(1,-MID(D5,ROW($1:$99),1)),"")
-MID(D5,ROW($1:$99),1)
Công thức sư phụ hay quá, độc đáo nhất là thêm dấu - vào trước hàm Mid (-1*Mid)
PHP:-MID(D5,ROW($1:$99),1)
--> biến tất cả chữ về #VALUE!, các số về giá trị <0
Đúng là quái kiệt thật, xin bái phục.
Dữ liệu cần tách tại A1 :Nhân tiện chủ đề tách, em xin hỏi bài toán muốn lấy khoảng số đầu tiên thì thuật toán làm bài này như thế nào ah:
VD: 122aab123bv ---> cho kết quả là 123
a1232ss12 --> 1232
b112bbb256 --> 112
=LOOKUP(99^99,--MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),ROW(INDIRECT("1:"&LEN(A1)))))
=REPLACE(D5,1,MATCH(1,-MID(D5,ROW($1:$99),1)),"")
MID(D5,MATCH(1,-MID(D5,ROW(INDIRECT("1:"&LEN(D5))),1))+1,LEN(D5))
Ui siêu gì đâu, tôi cũng học của các sư phụ và các anh chị trên diễn đàn thôi.Chị hoamattroicoi kiến thức siêu quá, công thức này chắc chỉ có các thày trên diễn đàn là làm được, chứ cỡ như em ngồi cả ngày cũng chẳng nghĩ được
Xin hỏi chị và mọi người một chút để em học hỏi, nếu em cần lấy cụm số thứ 2 thì thuật toán thay đổi thế nào?
VD: 122aab123bv ---> cho kết quả là 123
a1232ss12 --> 12
b112bbb256 --> 256
-------
Nếu được hộ cho em cả VBA nữa càng tốt ah.
Function tachSOcuoi(Rng As Range)
Dim i As Integer
Dim Mys As String
Dim j As Integer
Dim x
Mys = Rng.Value
For i = Len(Mys) To 1 Step -1
If IsNumeric(Mid(Mys, i, 1)) Then Exit For
Next
For j = i To 1 Step -1
If IsNumeric(Mid(Mys, j, 1)) = False Then Exit For
x = Mid(Mys, j, 1) & x
Next
tachSOcuoi = x
End Function