Cái này dùng VBA sẽ nhẹ hơn!ô A1: 0.12mm-5.6cm*50md*180mtrs
A2: 0.15mm-11.0cm*75md*360mtrs
làm sao tách B1:0.12, B2:0.15; c1:5.6, c2:11.0; d1:180,d2:360
xin chỉ giúp cảm ơn nhiều
Function TachSo(Chuoi As String, Vitri As Long) As String
Dim Temp1 As String, Temp2 As Variant
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "[^0-9.]"
Temp1 = .Replace(Chuoi, " ")
End With
Temp2 = Split(WorksheetFunction.Trim(Temp1), " ")
TachSo = Temp2(Vitri - 1)
End Function
Bạn ơi! Mấy kiến thức ấy không phải tôi tự nghĩ ra (đâu có giỏi thế)... Chẳng qua là... Google mỗi khi.. bí(Spam tí) Ước gì mình được như anh ấy!
ô A1: 0.12mm-5.6cm*50md*180mtrs
A2: 0.15mm-11.0cm*75md*360mtrs
làm sao tách B1:0.12, B2:0.15; c1:5.6, c2:11.0; d1:180,d2:360
xin chỉ giúp cảm ơn nhiều
Function GetNum(Str As String, Opt As Byte) As Double
Dim Arr
Str = Replace(Replace(Replace(Replace(Replace(LCase(Str), " ", ""), _
"mm-", " "), "cm*", " "), "md*", " "), "mtrs", "")
Arr = Split(Str, " ")
GetNum = Switch(Opt = 1, Arr(0), Opt = 2, Arr(1), Opt = 3, Arr(2), Opt = 4, Arr(3))
End Function
Ái chà.... Nếu mấy chử mm, cm*, md*, mtrs là các chử khác thì sao? Replace đến bao giờ cho hếtGửi bạn cách dùng bằng công thức và VBA :
PHP:Function GetNum(Str As String, Opt As Byte) As Double Dim Arr Str = Replace(Replace(Replace(Replace(Replace(LCase(Str), " ", ""), _ "mm-", " "), "cm*", " "), "md*", " "), "mtrs", "") Arr = Split(Str, " ") GetNum = Switch(Opt = 1, Arr(0), Opt = 2, Arr(1), Opt = 3, Arr(2), Opt = 4, Arr(3)) End Function
Trong code của tôi, bạn thay:Nhân tiện đây cho anh chỉ luôn cho em biết cách tách chữ thay vì số như trên.
Em cám ơn trước.
Function TachChu(Cell As Range) As String
Set Temp = CreateObject("VBScript.RegExp")
Temp.Global = True
Temp.Pattern = "\d"
TachChu = Temp.Replace(Cell, "")
End Function
Function TachSo(Cell As Range) As Double
Set Temp = CreateObject("VBScript.RegExp")
Temp.Global = True
Temp.Pattern = "\D"
TachSo = Temp.Replace(Cell, "")
End Function
Function cTachChu(Chuoi As String, Vitri As Long) As String
Dim Temp1 As String, Temp2 As Variant
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "[0-9.]"
Temp1 = .Replace(Chuoi, " ")
End With
Temp2 = Split(WorksheetFunction.Trim(Temp1), " ")
cTachChu = Temp2(Vitri - 1)
End Function
Function cTachSo(Chuoi As String, Vitri As Long) As String
Dim Temp1 As String, Temp2 As Variant
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "[^0-9.]"
Temp1 = .Replace(Chuoi, " ")
End With
Temp2 = Split(WorksheetFunction.Trim(Temp1), " ")
cTachSo = Temp2(Vitri - 1)
End Function
Để người dùng không phải can thiệp vào code khi các chữ cần thay bị thay đổi, hàm TachSo sẽ loại tất cả các chữ không phải số, chỉ giữ lại các số và dấu chấm, dấu phẩy. Căn cứ vào đối số vị trí, hàm sẽ tách số cần tìm.Ái chà.... Nếu mấy chử mm, cm*, md*, mtrs là các chử khác thì sao? Replace đến bao giờ cho hết
(ví dụ thay md thành ma thì Function ấy.. tèo ngay)
Function TachSo(number As String, vitri As Long) As String
Dim tmp As String, kt As String
number = Trim(number) & " "
If i <= 0 Then Exit Function
For i = 1 To Len(number)
kt = AscW(Mid(number, i, 1))
If (kt > 47 And kt < 58) Or kt = 44 Or kt = 46 Then
tmp = tmp & Mid(number, i, 1)
Else
tmp = Trim(tmp) & " "
End If
If Len(tmp) - Len(Replace(tmp, " ", "")) = vitri Then
If InStrRev(tmp, " ", Len(tmp) - 1) = 0 Then
TachSo = Trim(tmp)
Else
TachSo = Trim(Mid(tmp, InStrRev(tmp, " ", Len(tmp) - 1)))
End If
Exit Function
End If
Next
End Function
Anh có thể đính kèm file lên được không? Chứ em dùng code này nó toàn cho kết quả = rổng!Để người dùng không phải can thiệp vào code khi các chữ cần thay bị thay đổi, hàm TachSo sẽ loại tất cả các chữ không phải số, chỉ giữ lại các số và dấu chấm, dấu phẩy. Căn cứ vào đối số vị trí, hàm sẽ tách số cần tìm.
Hàm có 2 đối số:
number: chuỗi cần tách số.
vitri: vị trí số thứ mấy trong chuỗi cần tách.
Ví dụ ô A1= 0.12mm-5.6cm*50md*180mtrs
TachSo(A1,1) > 0.12
TachSo(A1,2) > 5.6
TachSo(A1,3) > 50
TachSo(A1,4) > 180
TachSo(A1,5) > "" không tìm thấy
Mã:Function TachSo(number As String, vitri As Long) As String Dim tmp As String, kt As String number = Trim(number) & " " If i <= 0 Then Exit Function For i = 1 To Len(number) kt = AscW(Mid(number, i, 1)) If (kt > 47 And kt < 58) Or kt = 44 Or kt = 46 Then tmp = tmp & Mid(number, i, 1) Else tmp = Trim(tmp) & " " End If If Len(tmp) - Len(Replace(tmp, " ", "")) = vitri Then If InStrRev(tmp, " ", Len(tmp) - 1) = 0 Then TachSo = Trim(tmp) Else TachSo = Trim(Mid(tmp, InStrRev(tmp, " ", Len(tmp) - 1))) End If Exit Function End If Next End Function
Xin lỗi vì em mới bắt đầu học nên nó còn mù mờ lắm. Anh có thể hướng dẫn cách khai báo i như đoạn code của anh thì nó báo lỗi ở i khi bỏ dòng "Option Explicit" thì nó cho ra kết quả rỗngMã:Function TachSo(number As String, vitri As Long) As String Dim tmp As String, kt As String number = Trim(number) & " " If [SIZE=4][COLOR=red][B]i[/B][/COLOR][/SIZE] <= 0 Then Exit Function For [SIZE=4][COLOR=red][B]i[/B][/COLOR][/SIZE] = 1 To Len(number) kt = AscW(Mid(number, [SIZE=4][COLOR=red][B]i[/B][/COLOR][/SIZE], 1)) If (kt > 47 And kt < 58) Or kt = 44 Or kt = 46 Then tmp = tmp & Mid(number, i, 1) Else tmp = Trim(tmp) & " " End If If Len(tmp) - Len(Replace(tmp, " ", "")) = vitri Then If InStrRev(tmp, " ", Len(tmp) - 1) = 0 Then TachSo = Trim(tmp) Else TachSo = Trim(Mid(tmp, InStrRev(tmp, " ", Len(tmp) - 1))) End If Exit Function End If Next End Function
Xin lỗi vì em mới bắt đầu học nên nó còn mù mờ lắm. Anh có thể hướng dẫn cách khai báo i như đoạn code của anh thì nó báo lỗi ở i khi bỏ dòng "Option Explicit" thì nó cho ra kết quả rỗng
Cám ơn anh
If i <= 0 Then Exit Function
Function TachSo(number As String, vitri As Long) As String
Dim tmp As String, kt As String, i As Long
number = Trim(number) & " "
If vitri <= 0 Then Exit Function
For i = 1 To Len(number)
kt = AscW(Mid(number, i, 1))
If (kt > 47 And kt < 58) Or kt = 44 Or kt = 46 Then
tmp = tmp & Mid(number, i, 1)
Else
tmp = Trim(tmp) & " "
End If
If Len(tmp) - Len(Replace(tmp, " ", "")) = vitri Then
If InStrRev(tmp, " ", Len(tmp) - 1) = 0 Then
TachSo = Trim(tmp)
Else
TachSo = Trim(Mid(tmp, InStrRev(tmp, " ", Len(tmp) - 1)))
End If
Exit Function
End If
Next
End Function
Xin lỗi vì em mới bắt đầu học nên nó còn mù mờ lắm. Anh có thể hướng dẫn cách khai báo i như đoạn code của anh thì nó báo lỗi ở i khi bỏ dòng "Option Explicit" thì nó cho ra kết quả rỗng
Cám ơn anh
Xin lỗi các bạn, mình viết sai:If i <= 0 Then Exit Function, đúng là If vitri <= 0 Then Exit FunctionAnh có thể đính kèm file lên được không? Chứ em dùng code này nó toàn cho kết quả = rổng!
Em không hiểu đoạn If i <= 0 Then Exit Function là dùng để làm gì? Xóa đoạn này mới cho kết quả
Mà For như thế công nhận.. quá cực khổ anh à!
Nếu anh vẫn nhất định muốn dùng For thì em nghĩ anh khai báo Number As Range sẽ thuận tiện hơn... ví dụ:Xin lỗi các bạn, mình viết sai:If i <= 0 Then Exit Function, đúng là If vitri <= 0 Then Exit Function
thunghi đã phát hiện và chỉnh dùm ở bài 13.
Chưa tìm được thuật toán nào gọn hơn. Vả lại, cái khó là không thể loại bỏ các chữ mà thay bằng khoảng trắng để cách ly các số, và giữa mỗi số chỉ duy nhất có 1 khoảng trắng. Chỉ có for mới làm được !
Function TachSo(Chuoi As Range, Vitri As Long) As String
Dim i As Long, Temp As Variant
Temp = Chuoi.Value
For i = 1 To Len(Chuoi.Value)
If IsNumeric(Mid(Chuoi, i, 1)) = False And Mid(Chuoi, i, 1) <> "." Then
Temp = Replace(Temp, Chuoi.Characters(i, 1).Text, " ", 1, 1)
End If
Next
Temp = Split(WorksheetFunction.Trim(Temp), " ")
TachSo = Temp(Vitri - 1)
End Function
Hàm viết rất gọn. Không biết cách nào để tách đúng vị trí nên phải dùng:Nếu anh vẫn nhất định muốn dùng For thì em nghĩ anh khai báo Number As Range sẽ thuận tiện hơn... ví dụ:
Anh thử xem!PHP:Function TachSo(Chuoi As Range, Vitri As Long) As String Dim i As Long, Temp As Variant Temp = Chuoi.Value For i = 1 To Len(Chuoi.Value) If IsNumeric(Mid(Chuoi, i, 1)) = False And Mid(Chuoi, i, 1) <> "." Then Temp = Replace(Temp, Chuoi.Characters(i, 1).Text, " ", 1, 1) End If Next Temp = Split(WorksheetFunction.Trim(Temp), " ") TachSo = Temp(Vitri - 1) End Function
If Len(tmp) - Len(Replace(tmp, " ", "")) = vitri Then
If InStrRev(tmp, " ", Len(tmp) - 1) = 0 Then
TachSo = Trim(tmp)
Else
TachSo = Trim(Mid(tmp, InStrRev(tmp, " ", Len(tmp) - 1)))
End If
Exit Function
End If
Thì.. là bài số #2 đấy anhNếu không dùng for, ndu96081631 viết thế nào?
Function TachSo(Chuoi As String, Vitri As Long) As String
Dim Temp1 As String, Temp2 As Variant
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "[^0-9.]"
Temp1 = .Replace(Chuoi, " ")
End With
Temp2 = Split(WorksheetFunction.Trim(Temp1), " ")
TachSo = Temp2(Vitri - 1)
End Function
mình đang sử dụng excel 2003..,, nho mọi người chỉ giúp mình hàm cắt bỏ ký tự chỉ giử lại con số mà thui
VD: TN03598641 --> 03598641
745632( hàng thành phẩm ) --> 745632
NK123654/M ---> 123654
Cảm ơn mọi người nhiều ah
Dựa vào kí tự VH để tìm rồi tách nó raNhờ mọi người giúp em tách riêng mã hàng hóa ra từ trong chuỗi, em co đính kèm file,, chúc mọi người moy65 ngày mới vui ve ,, Thank !!!
Thủ công 1 tí, công thức không đến nỗi dài lắm. Xem file nhé!Nhờ mọi người giúp em tách riêng mã hàng hóa ra từ trong chuỗi, em co đính kèm file,, chúc mọi người moy65 ngày mới vui ve ,, Thank !!!
Đối với những mã VH- ####### thì nó sẽ cho ra VH-Thủ công 1 tí, công thức không đến nỗi dài lắm. Xem file nhé!
Vậy em dùng thêm substitute phía trước nữa là đượcĐối với những mã VH- ####### thì nó sẽ cho ra VH-
Ví dụ: VH- 31615111
Mahang =SUBSTITUTE(RIGHT(C9;LEN(C9)-FIND("VH";C9)+1);"- ";"-")
Bạn thay thế +1 bằng -2 thử nhéNếu minh muốn bỏ luôn 2 chữ "VH- " thì làm như thế nào ah ,,, Thank mọi người đã giúp
ko bắt đầu bằng " VH- " là sao bạn, mình thấy có đủ VH màrất tuyệt nhug khi keo công thức xuống gặp vấn đề như sau :
thung giặt VH- 2200151 ( hàng thô ) _--> ct sẽ cho ra --> 2200151 ( hàng thô )
hichic,, mình ko muốn vậy ,, chỉ lấy con số thui
va thêm nữa ,, nhiều cái ko bắt đầu bằng " VH- " --> ct báo lỗi #value!
hichcic
Public Function ma(vung As Range) As String
Const dk = "1234567890/"
Dim i, j As Integer, tam, kq As String
i = InStr(1, vung, "VH")
For j = i To Len(vung)
tam = Mid(vung, j, 1)
If InStr(1, dk, tam) Then kq = kq & tam
Next
ma = kq
End Function
Vậy thì dùng VBA, bạn xem lại bài số #2 nhé.rất tuyệt nhug khi keo công thức xuống gặp vấn đề như sau :
thung giặt VH- 2200151 ( hàng thô ) _--> ct sẽ cho ra --> 2200151 ( hàng thô )
hichic,, mình ko muốn vậy ,, chỉ lấy con số thui
va thêm nữa ,, nhiều cái ko bắt đầu bằng " VH- " --> ct báo lỗi #value!
hichcic
rất tuyệt nhug khi keo công thức xuống gặp vấn đề như sau :
thung giặt VH- 2200151 ( hàng thô ) _--> ct sẽ cho ra --> 2200151 ( hàng thô )
hichic,, mình ko muốn vậy ,, chỉ lấy con số thui
va thêm nữa ,, nhiều cái ko bắt đầu bằng " VH- " --> ct báo lỗi #value!
hichcic
=IF(ISERR(FIND(" ",SUBSTITUTE(RIGHT(C9,LEN(C9)-FIND("VH",C9)-2),"_"," "))),RIGHT(C9,LEN(C9)-FIND("VH",C9)-2),LEFT(SUBSTITUTE(RIGHT(C9,LEN(C9)-FIND("VH",C9)-2),"_"," "),FIND(" ",SUBSTITUTE(RIGHT(C9,LEN(C9)-FIND("VH",C9)-2),"_"," "))-1))
rất tuyệt ,, nhug dữ liệu của em,, đã bị bỏ chữ " VH-" từ trước rồi ah,, người lam trước ko co nhập chữ " VH- ", mà chỉ nhập
301152
301153/5
30992152/M
3000526/L
.... .. giờ e không thể ngồi sửa lại dc,, dữ liệu nhiều lắm ah ..
nhờ mọi người giúp đỡ
Bạn sửa lại công thức trong các Name:rất tuyệt ,, nhug dữ liệu của em,, đã bị bỏ chữ " VH-" từ trước rồi ah,, người lam trước ko co nhập chữ " VH- ", mà chỉ nhập
301152
301153/5
30992152/M
3000526/L
.... .. giờ e không thể ngồi sửa lại dc,, dữ liệu nhiều lắm ah ..
nhờ mọi người giúp đỡ
FindChr10 =ISERROR(FIND(" ", $C9, FIND("VH", $C9)))
FindVH =ISERROR(FIND("VH", $C9))
MaHang =IF(FindVH, "", MID($C9, FIND("VH",$C9)+2, IF(FindChr10, LEN(TRIM($C9))-FIND("VH", $C9)-1, FIND(" ",$C9,FIND("VH",$C9))-FIND("VH",$C9)-1)))
Không biết em có làm sai cái gì không mà sao khi chỉnh sửa công thức nó bị như vầy ,, em không biết cách sửa , nhờ mọi người
IF(FindVH, "", MID($C9, FIND("VH",$C9)+2, IF(FindChr10, LEN(TRIM($C9))FIND("VH", $C9)1, FIND(" ",$C9,FIND("VH",$C9))FIND("VH",$C9)1)))
nó không chạy công thức ,,,, hichic
domfootwear: Lần sau bạn nên viết Tiếng Việt có dấu và không sử dụng từ chát chít nhé.
FindChr10 =ISERROR(FIND(" ", $C9, FIND("VH", $C9)))
FindVH =ISERROR(FIND("VH", $C9))
MaHang =IF(FindVH, "", MID($C9, FIND("VH",$C9)+2, IF(FindChr10, LEN(TRIM($C9))-FIND("VH", $C9)-1, FIND(" ",$C9,FIND("VH",$C9))-FIND("VH",$C9)-1)))
Có lẽ khi tạo Name, bạn không để ý cái chuyện này:Không biết em có làm sai cái gì không mà sao khi chỉnh sửa công thức nó bị như vầy ,, em không biết cách sửa , nhờ mọi người
IF(FindVH, "", MID($C9, FIND("VH",$C9)+2, IF(FindChr10, LEN(TRIM($C9))FIND("VH", $C9)1, FIND(" ",$C9,FIND("VH",$C9))FIND("VH",$C9)1)))
nó không chạy công thức ,,,, hichic
domfootwear: Lần sau bạn nên viết Tiếng Việt có dấu và không sử dụng từ chát chít nhé.
Nghĩa là, nếu trong công thức, bạn dùng C9, thì phải đang chọn một ô nào đó ở hàng thứ 9, nếu trong công thức, bạn dùng C17, thì phải đang chọn một ô nào đó ở hàng thứ 17, v.v...Lưu ý một điều, khi tạo công thức cho các Name như ở trên đây, bạn phải chắc chắn rằng bạn đang chọn một ô nào đó ở hàng 9.
Name FindChr10 của bạn sai, một tí ti thôi, bạn xem nì:Rồi ,, em làm như mọi người rồi ,, nhưng nó báo em làm sai ,, xin mọi người xem giúp em ah ,, em xin chân thành cảm ơn mọi người,, và sẽ lưu ý những gì mọi người nói,, xin cảm ơn,,
không biết là làm sai chỗ nào nữa hichichic...
VD: Ô A1 bạn có công thức là 75*105 => Tại B1 Bạn nhập công thức sau:Đọc các bài tách số mà chưa áp dụng được, các bạn giải giúp mình yêu cầu sau:Mình có 1 ô chứa kích thước được ghi theo qui ước cạnh*cạnh.
Muốn tách các ký tự số ở bên trái dấu "*" và bên phải dấu "*" để tìm diện tích
Ví dụ: 75*105 thì diện tích sẽ bằng số 75 nhân số 105 = 7.875
Ví dụ: 32.5*54.5 thì diện tích sẽ bằng số 32.5 nhân số 54.5 = 1.771.25
Ví dụ: 26.5*50 thì diện tích sẽ bằng số 26.5 nhân số 50 = 1.325
LEFT(A1;FIND("*";A1)-1)*RIGHT(A1;LEN(A1)-FIND("*";A1))
=EVALUATE($A1)
Nhưng mà mình còn vướng chỗ tách số này nữa, sao cho chỉ dùng 1 công thức để lấy đúng số mình muốn:
C80 sẽ lấy ra số 80
C90(1s) sẽ lấy ra số 90
C100 sẽ lấy ra số 100
D250(2s) sẽ lấy ra số 250
F150BB sẽ lấy ra số 150
F120TM sẽ lấy ra số 120
KRAFT180 sẽ lấy ra số 180
(Các số 80, 90, 100, 250, 150, 120,180, v.v... là các số mình muốn tách ra, các ký tự đứng trước và sau ký tự số (nếu có) là các ký hiệu do nhà cung cấp họ đặt tên)[/QUOTE]
Có thể nêu hết các ký hiệu do nhà cung cấp đặt tên không?
Tạm thời với cấu trúc dữ liệu như thế này dùng hàm " xi-ma-chao" này "xử" nó cũng ổn:
Khi nào có đủ dữ liệu thì "xử" nó tiếpMã:Public Function Cat(Cll As Range) As Long Dim i, Kq As Long Const So = "0123456789" For i = 1 To Len(Cll) If InStr(1, So, Mid(Cll, i, 1)) Then Kq = Kq & Mid(Cll, i, 1) If Mid(Cll, i, 1) = "(" Then Exit For Next Cat = Kq End Function
Cú pháp:
=cat(cell muốn lọc)
Thân
Option Explicit
Function TachSo(StrC As String)
Dim jJ As Byte, DDai As Byte: Dim Asc_ As String
StrC = "GPE" & StrC: DDai = Len(StrC)
For jJ = 1 To DDai
Asc_ = Mid(StrC, jJ, 1)
If Asc(Asc_) > 47 And Asc(Asc_) < 58 Then
StrC = Mid(StrC, jJ, DDai) & "GPE": Exit For
End If
Next jJ
For jJ = 1 To Len(StrC)
Asc_ = Mid(StrC, jJ, 1)
If Asc(Asc_) > 47 And Asc(Asc_) < 58 Then
TachSo = TachSo & Mid(StrC, jJ, 1)
Else
Exit For
End If
Next jJ
TachSo = CLng(TachSo)
End Function
Nhưng mà mình còn vướng chỗ tách số này nữa, sao cho chỉ dùng 1 công thức để lấy đúng số mình muốn:
C80 sẽ lấy ra số 80
C90(1s) sẽ lấy ra số 90
C100 sẽ lấy ra số 100
D250(2s) sẽ lấy ra số 250
F150BB sẽ lấy ra số 150
F120TM sẽ lấy ra số 120
KRAFT180 sẽ lấy ra số 180
(Các số 80, 90, 100, 250, 150, 120,180, v.v... là các số mình muốn tách ra, các ký tự đứng trước và sau ký tự số (nếu có) là các ký hiệu do nhà cung cấp họ đặt tên)[/QUOTE]
Có thể nêu hết các ký hiệu do nhà cung cấp đặt tên không?
Tạm thời với cấu trúc dữ liệu như thế này dùng hàm " xi-ma-chao" này "xử" nó cũng ổn:
Khi nào có đủ dữ liệu thì "xử" nó tiếpMã:Public Function Cat(Cll As Range) As Long Dim i, Kq As Long Const So = "0123456789" For i = 1 To Len(Cll) If InStr(1, So, Mid(Cll, i, 1)) Then Kq = Kq & Mid(Cll, i, 1) If Mid(Cll, i, 1) = "(" Then Exit For Next Cat = Kq End Function
Cú pháp:
=cat(cell muốn lọc)
Thân
Cho mình tham gia một tý
cái hàm của bác cò già nên sửa lại như thế này sẽ sử lý tổng quát hơn
Code:
PHP:Public Function Cat(target) Dim i, spos, epos spos = 0: epos = 0 ' tim vitri cua ki tu so dau tien For i = 1 To Len(target) Kq = Mid(target, i, 1) If IsNumeric(Kq) Then spos = i Exit For End If Next ' tim vitri cua ki tu so cuoi cung For i = spos To Len(target) Kq = Mid(target, i, 1) If Not IsNumeric(Kq) Then epos = i - 1 Exit For End If Next ' Truong hop so nam cuoi chuoi If epos = 0 Then epos = i Cat = Mid(target, spos, epos - spos + 1) End Function
Copy hàm tự tao này vào moduleEm có nhiều chuỗi trong đó có chứa các giá trị số ở gần cuối, giờ em muốn tách lấy số để lồng vào công thức tính.
Ví dụ:
Bonny 25SL-100ml tách lấy 100
Bonny 25SL-250ml tách lấy 250
Beam 75WP-8gr tách lấy 8
Beam 75wp-25gr tách lấy 25
Carbenda Super 25SC-500ml tách lấy 500
Có file đính kèm
Mong mọi người giúp đỡ
Private Function iNum(Cll As Range, ch As Variant)
iNum = Val(Trim(Right(Cll, Len(Cll) - InStr(Cll, ch))))
End Function
Công thức này:mọi người giúp em tách chữ ra khỏi chuỗi có dạng như 24d, 30d, 115d . Các chuỗi này nằm trên các ô theo hàng ngang.
Em có gửi bảng excel dưới ạ
=SUMPRODUCT(1*LEFT(D3:Y3,LEN(D3:Y3)-1))
=SUMPRODUCT(1*SUBSTITUTE(D3:Y3,"d",""))
Ồ!!! tách cái nyaf thì ok rồi tks bồ còn tách số thập phân ra ví như abc1,234 thì làm ntn zậy bồ
= Right("số cần tách ", Len("so can tach")-3)
cho em hỏi file excel của em có 1 ô chứa cả tên, địa chỉ sđt, và ko theo thứ tự vậy phải tách ntn ?
VD:
ô A1 có nội dung:
1. nguyen van a
2. Sdt: 0909999999
3. Dia chi 123,HCM
ô A2 có nội dung:
1. nguyen van b
2. Dia chi 123,DN
3. Sdt: 0169777777
Giờ em muốn tách sđt ra phải làm sao?
Function GetNumPhone(source) As String
Dim str$
str = source
With CreateObject("vbscript.regexp")
.MultiLine = True
.ignorecase = True
.Pattern = "sdt\s*:\s*(\d+)"
If .test(str) Then GetNumPhone = .Execute(str)(0).submatches(0)
End With
End Function
=GetNumPhone(A1)
Cái này dùng VBA sẽ nhẹ hơn!
Thử code này xem:
Không có vòng lập nào nhéPHP:Function TachSo(Chuoi As String, Vitri As Long) As String Dim Temp1 As String, Temp2 As Variant With CreateObject("VBScript.RegExp") .Global = True .Pattern = "[^0-9.]" Temp1 = .Replace(Chuoi, " ") End With Temp2 = Split(WorksheetFunction.Trim(Temp1), " ") TachSo = Temp2(Vitri - 1) End Function
Thử thayNếu muốn tách số âm, ví dụ a1bg-2 (lấy số -2) thì làm thế nào ạ
Thử thay
.Pattern = "[^0-9.]"
thành
.Pattern = "[a-zA-Z]+"
nhập =tachso("a1bg-2",2)
---
cụ thể thì phải có file đính kèm
Chỉ có 1 dòng thì tách tay cho lẹCho em hỏi làm thế nào để tách đoạn văn bản như thế này thành các cột riêng biệt? (Hơi phức tạp tí)
View attachment 190893
Đây chỉ là một dòng ví dụ điển hình thôi, chứ em nhập tay văn bản giống như thế này rất nhiều.Chỉ có 1 dòng thì tách tay cho lẹ
Cho em hỏi làm thế nào để tách đoạn văn bản như thế này thành các cột riêng biệt? (Hơi phức tạp tí)
View attachment 190893
Nhập tay theo các dạng như thế nào? Đưa lên chính xác và đầy đủ mới viết code đượcĐây chỉ là một dòng ví dụ điển hình thôi, chứ em nhập tay văn bản giống như thế này rất nhiều.
Có hàm GPE() này bạn thử xem sao.Chào mọi người, mọi người cho em hỏi làm sao để tách chữ có 8 ký tự trong 1 chuỗi được không ạ?
Cám ơn bạn nhiều nha. ^^. Đa tạ đa tạCó hàm GPE() này bạn thử xem sao.
Nhớ Enable Macros khi mở file.
----------------------
Đổi file.