Tách số không dùng vòng lặp (3 người xem)

Liên hệ QC

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

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,957
Sưu tầm được 1 hàm tách số khá hay, xin chia sẽ với mọi người!
Điểm đặc biệt là không dùng tí vòng lập nào!
PHP:
Function TachSo(Cell As Range) As Double
  Set Temp = CreateObject("VBScript.RegExp")
  Temp.Global = True
  Temp.Pattern = "[^0-9]"
  TachSo = Temp.Replace(Cell, "")
End Function
Các bạn có thể tham khảo và phát triển thêm tùy theo yêu cầu riêng!
 

File đính kèm

Còn cách ngon nhất là viết hàm UDF, còn sử theo công thức mà nguồn không đồng nhất kiểu này không thể chắc.
 
Upvote 0
Còn cách ngon nhất là viết hàm UDF, còn sử theo công thức mà nguồn không đồng nhất kiểu này không thể chắc.
Công thức cũng được nhưng hơi cực chút
- Với công thức của anh, ta sẽ đặt nó thành 1 name, bỏ dấu #, chỉ lấy phần định dạng "0.0"
- Sau đó tách định dạng "0.0" thành 2 phần dựa vào dấu chấm phân cách, mổi phần sẽ được định dạng "00"
- Cuối cùng là ráp 2 phần lại
 
Upvote 0

File đính kèm

Upvote 0
Chán bạn quá! Bài số #22 đã hướng dẫn rõ thế rồi mà bạn không chịu suy nghĩ
Xem file nè đại ca
Files này ổn rồi nhưng bây giờ mới có dữ liệu mới như thế này:
A1: P0101_jhluhliu_Bit/0
A2: P0102_khgljlhgkhl_Bit/9
A3: P0102_khgljlhgkhljkjk
A4: P0203_hgluglugljlih;i;_Bit/12
B1: Menu,70 Parameter,2 Routing Slot No.,3 CTnet Node No.,0
B2: Menu,74 Parameter,12 Routing Slot No.,3 CTnet Node No.,2
B3: Menu,72 Parameter,7 Routing Slot No.,3 CTnet Node No.,6
B4: Menu,72 Parameter,9 Routing Slot No.,3 CTnet Node No.,4
Viết hàm lấy Bit ở cột C1,C2,C3,C4 có kết quả là: 0,9, ,12
Viết hàm lấy địa chỉ ở cột D1,D2,D3,D4 có kết quả là: #70.02.0,#74.12.9,#72.07,#72.09.12
Note: Nếu ở cột A hàm không có "_Bit/xx" hoặc "_Bit/x" với "x" là các chử số, thì Cột D không cần ghép thêm vào "#xx.xx" thôi.
Mông các chuyên gia làm giùm với!
 
Upvote 0
A1: P0101_jhluhliu_Bit/0
A2: P0102_khgljlhgkhl_Bit/9
A3: P0102_khgljlhgkhljkjk
A4: P0203_hgluglugljlih;i;_Bit/12

1) Bạn cần tách gì trong dãy số trên?

2) Bạn xem name của công thức (Tmp), theo cách làm của Thầy Ndu để tự chỉnh sửa, nếu sửa không được bạn có thể hỏi tiếp! OK?
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Có thể dùng hàm VBA theo topic này

Cú pháp:

CtoNPlus(chuỗi, Stt chuỗi số, dấu TP)

Tham số dấu TP có thể bỏ trống nếu số nguyên không có thập phân.

Cột C:
C2 =IF(ISERROR(FIND("Bit/";A2;1));"";RIGHT(A2;LEN(A2)-FIND("Bit/";A2;1)-3))

Cột D:
D2 ="#"&CtoNPlus(B2;1)&"."&CtoNPlus(B2;2)&IF(C2="";"" ;"."&C2)
 

File đính kèm

Upvote 0
Có thể dùng hàm VBA theo topic này

Cú pháp:

CtoNPlus(chuỗi, Stt chuỗi số, dấu TP)

Tham số dấu TP có thể bỏ trống nếu số nguyên không có thập phân.

Cột C:
C2 =IF(ISERROR(FIND("Bit/";A2;1));"";RIGHT(A2;LEN(A2)-FIND("Bit/";A2;1)-3))

Cột D:
D2 ="#"&CtoNPlus(B2;1)&"."&CtoNPlus(B2;2)&IF(C2="";"" ;"."&C2)
Cám ơn bạn nhiều!, Công thức gần đứng với yêu cầu nhưng hơi thiếu một chút ở chổ: Parameter,2 =02;Parameter,12 =12
Để mình thử sửa lại công thức xem sao nếu không được thỉ mình nhờ bạn giúp.Cái này Bạn "ndu96081631" có làm công thức chomình rồi nhưng không biết mình có làm tiếp được không.Ồ bạn viết bằng Macro thì mình bó tay mình không biết về cài này
Bạn thử chỉnh lại công thức cho đúng kết quả được không?
Thank!
 
Lần chỉnh sửa cuối:
Upvote 0
D2 ="#"&CtoNPlus(B2;1)&"."&CtoNPlus(B2;2)&IF(C2="" ;"" ;"."&C2)
sửa thành:
D2 ="#"&CtoNPlus(B2;1)&"."&Text(CtoNPlus(B2;2);"00")&IF(C2="" ;"" ;"."&C2)

Nghĩa là:

Hàm CtonPlus lấy ra số ở vị trí số thứ n. Bạn kết hợp với các hàm thông thường của Excel như text, sum, If, tóan tử nối "&" ....

Bạn xem thí dụ ở những dòng dưới, tôi dùng hàm Time kết hợp 2 CtoNPlus còn ra kết quả giờ phút được.
 
Upvote 0
D2 ="#"&CtoNPlus(B2;1)&"."&CtoNPlus(B2;2)&IF(C2="" ;"" ;"."&C2)
sửa thành:
D2 ="#"&CtoNPlus(B2;1)&"."&Text(CtoNPlus(B2;2);"00")&IF(C2="" ;"" ;"."&C2)

Nghĩa là:

Hàm CtonPlus lấy ra số ở vị trí số thứ n. Bạn kết hợp với các hàm thông thường của Excel như text, sum, If, tóan tử nối "&" ....

Bạn xem thí dụ ở những dòng dưới, tôi dùng hàm Time kết hợp 2 CtoNPlus còn ra kết quả giờ phút được.
Cảm ơn Bạn nhiều! Không ngờ bạn Update nhanh đến thế.
Không biết mình muốn lấy "Routing Slot No.,3" =3 ở cột E và "CTnet Node No.,14" =14 ở cột F thì phải làm sao nhỉ Bạn giúp mình với.
Thank! nhiều.
 
Upvote 0
B1: Menu,70 Parameter,2 Routing Slot No.,3 CTnet Node No.,0

Trong chuỗi ký tự có 4 nhóm số ở các vị trí 1: 70, 2: 2, 3: 3, 4: 0

Bạn cho các số vị trí màu xanh vào tham số Stt chuỗi số. Cụ thể là:

E1 = CtoNPlus(B2;3)

F1 =
CtoNPlus(B2;4)

Ghi chú:

Nếu thiêu 1 số ở giữa thì hàm lấy sai, thí dụ thiếu Routing SlotNo như sau:

Menu,70 Parameter,2 Routing Slot No., CTnet Node No.,0

Vì số 0 của Node No. trở thành nhóm số thứ 3 và không có nhóm 4.

 
Lần chỉnh sửa cuối:
Upvote 0
B1: Menu,70 Parameter,2 Routing Slot No.,3 CTnet Node No.,0

Trong chuỗi ký tự có 4 nhóm số ở các vị trí 1: 70, 2: 2, 3: 3, 4: 0

Bạn cho các số vị trí màu xanh vào tham số Stt chuỗi số. Cụ thể là:

E1 = CtoNPlus(B2;3)

F1 =
CtoNPlus(B2;4)

Ghi chú:

Nếu thiêu 1 số ở giữa thì hàm lấy sai, thí dụ thiếu Routing SlotNo như sau:

Menu,70 Parameter,2 Routing Slot No., CTnet Node No.,0

Vì số 0 của Node No. trở thành nhóm số thứ 3 và không có nhóm 4.

Vậy còn cách nào để lấy khác không
B1: Menu,70 Parameter,2
B2: Menu,70 Parameter,2 Routing Slot No.,3 CTnet Node No.,0
E1:=" " (khoảng trống)
F1:=" "
E2:=3
F2:=0
Thank!
 
Lần chỉnh sửa cuối:
Upvote 0
Sửa hàm 1 tí tẹo, không ép kết quả là double.
 

File đính kèm

Upvote 0
Em có chuỗi sau: 1.208*32*(h+450)/1000
Giờ em muốn tính kết quả ra lấy phần chứa số + phần chứa chữ là: 17.3952+0.038656*h
Nghĩa là với định dạng như trên, hàm chỉ tách lấy ra h+, còn phần số và dấu * tự lấy để ra kết quả
Hàm nào có thể tính được thế này không?
 
Upvote 0
Sưu tầm được 1 hàm tách số khá hay, xin chia sẽ với mọi người!
Điểm đặc biệt là không dùng tí vòng lập nào!
PHP:
Function TachSo(Cell As Range) As Double
  Set Temp = CreateObject("VBScript.RegExp")
  Temp.Global = True
  Temp.Pattern = "[^0-9]"
  TachSo = Temp.Replace(Cell, "")
End Function
Các bạn có thể tham khảo và phát triển thêm tùy theo yêu cầu riêng!
chào bạn
mình mở excel của mình ra, đánh lệnh TachSo(A1) như của bạn nhưng nó báo lỗi name
mình không hiểu code của bạn sẽ dán vào đâu trong excel để sử dụng được như bạn
mong bạn chỉ dùm
bạn gửi thư cho mình nhé: thegioiquanhta21082010@gmail.com
xin cảm ơn
 
Upvote 0
Sưu tầm được 1 hàm tách số khá hay, xin chia sẽ với mọi người!
Điểm đặc biệt là không dùng tí vòng lập nào!
PHP:
Function TachSo(Cell As Range) As Double
  Set Temp = CreateObject("VBScript.RegExp")
  Temp.Global = True
  Temp.Pattern = "[^0-9]"
  TachSo = Temp.Replace(Cell, "")
End Function
Các bạn có thể tham khảo và phát triển thêm tùy theo yêu cầu riêng!

Sư phụ Ndu ơi, phiền sư phụ; các anh, chị làm luôn hộ em cả cách dùng vòng lặp, em rất muốn biết thuật toán của nó ra sao?
 
Upvote 0
Sư phụ Ndu ơi, phiền sư phụ; các anh, chị làm luôn hộ em cả cách dùng vòng lặp, em rất muốn biết thuật toán của nó ra sao?
Thì cứ cho một vòng lặp chạy từng ký tự một, từ đầu tới cuối cell chứa dữ liệu, thằng nào là số thì "lụm" nó bỏ vào kết quả, còn lại mấy em kia thì......mặc xác nó
Bạn muốn có bài giải thì cứ đưa đề lên
Híc
 
Upvote 0
Sư phụ Ndu ơi, phiền sư phụ; các anh, chị làm luôn hộ em cả cách dùng vòng lặp, em rất muốn biết thuật toán của nó ra sao?
Nếu dùng vòng lặp thì đơn giản
PHP:
Function TachSo(Cell As Range) As Double
Dim i&
Dim Tmp As String, Str As String
Str = "0123456789"
For i = 1 To Len(Cell.Value)
 If InStr(1, Str, Mid(Cell.Value, i, 1)) > 0Then
   Tmp = Tmp & Mid(Cell.Value, i, 1)
 End If
Next
  TachSo = Tmp
End Function
 
Upvote 0
Sưu tầm được 1 hàm tách số khá hay, xin chia sẽ với mọi người!
Điểm đặc biệt là không dùng tí vòng lập nào!
PHP:
Function TachSo(Cell As Range) As Double
  Set Temp = CreateObject("VBScript.RegExp")
  Temp.Global = True
  Temp.Pattern = "[^0-9]"
  TachSo = Temp.Replace(Cell, "")
End Function
Các bạn có thể tham khảo và phát triển thêm tùy theo yêu cầu riêng!

Em định cho Application.Volatile để hàm tự cập nhật, nhưng không được, xin các thày chỉ cho.
 
Upvote 0
Web KT

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

Back
Top Bottom