Tách riêng số từ chuỗi (6 người xem)

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

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

Tách số từ chuỗi và tìm diện tích

Đọ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
 
Đọ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
VD: Ô A1 bạn có công thức là 75*105 => Tại B1 Bạn nhập công thức sau:
1/Cách 1:
Mã:
LEFT(A1;FIND("*";A1)-1)*RIGHT(A1;LEN(A1)-FIND("*";A1))
2/Cách 2: Đặt con trỏ tại ô B1 -> Vào Insert /name/Define
- Trong ô names in workbook bạn đặt tên (VD tên là KQ)
- Trong ô Refers to bạn nhập công thức sau:
Mã:
=EVALUATE($A1)
=> Bấm OK và ra ngoài tại ô B1 bạn nhập =KQ (để xem kết quả)
 
Hay quá!
Cảm ơn bạn MinhCong nhiều, mình cứ tìm hòai các Left, Right, Mid, Len mà không ra; bây giờ thì Ok rồi.

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)
 
Chỉnh sửa lần cuối bởi điều hành viên:
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:
Mã:
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
Khi nào có đủ dữ liệu thì "xử" nó tiếp
Cú pháp:
=cat(cell muốn lọc)
Thân
 
Các ký hiệu do nhà cung cấp đặt tên là như vậy đó anh, phía trước ký tự số là 1 hoặc vài ký tự text, phía sau nó cũng là 1 hoặc nhiều ký tự text.
Cảm ơn bác concògià và hàm "xi-ma-chao".
Cảm ơn bác MinhCong với 2 cách xử lý chuỗi ký tự.
Cảm ơn bác ndu với hàm TachSo.
 
Hàm của ConCoGia cần viết lại như thế này

PHP:
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:
Mã:
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
Khi nào có đủ dữ liệu thì "xử" nó tiếp
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
 
Tách lấy số từ chuỗi để đưa vào công thức

Em 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 đỡ
 

File đính kèm

Em 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 đỡ
Copy hàm tự tao này vào module
Mã:
Private Function iNum(Cll As Range, ch As Variant)
iNum = Val(Trim(Right(Cll, Len(Cll) - InStr(Cll, ch))))
End Function
Cú pháp: =iNum(Ô nào đó, "dấu nối nào đó")
Hàm này sẽ tách lấy phần số sau dấu nối cho Bạn
Chẳng hạn:
[A14] = "CARBENDA SUPPER 50 SC - 500ml"
Tại ô nào đó, gõ =inum(A14,"-") kết quả là --> 500
 
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 ạ
 

File đính kèm

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 ạ
Công thức này:
Mã:
=SUMPRODUCT(1*LEFT(D3:Y3,LEN(D3:Y3)-1))
Hoặc cái này:
Mã:
=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ồ
 
Ồ!!! 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ồ

Theo mình nếu mà chuỗi ( gồm số và chữ ) có quy luật thì có thể dùng hàm trong cel, còn nếu chuỗi và số lẫn lộn bạn có thể tham khảo code tách số và chữ của pác ndu

ví dụ : nếu chỉ có dang ạbc1,234 có thể dùng :

PHP:
 = 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?
 
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?

Mã:
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
ở ô B2 nhập công thức :
PHP:
=GetNumPhone(A1)
 
Thắc mắc

Cái này dùng VBA sẽ nhẹ hơn!
Thử code này xem:
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
Không có vòng lập nào nhé

Nế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

Làm như thế chỉ lấy số thứ 2 trong chuỗi chứ không nhất thiết đúng điều kiện số âm.

Muốn lấy số âm thì phải dùng pattern "-\d+(\.\d+)?", và lấy match chứ không replace. Thay \. bằng dấy phẩy, tuỳ theo hệ thống
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom