Lại chủ để tách sô (nhưng tách từ trong công thức)

Liên hệ QC

ST-Lu!

Love Wingchun
Tham gia
19/8/08
Bài viết
730
Được thích
546
Nghề nghiệp
Xích lô một thời
Cháo các sư huynh
Ví dụ: Cột A ta có công thức sau
= P2*C2*1,4+P2*D2*2


P117*C117*1,2+P117*D117*1,8


làm cách nào mình có thể lấy ra được số trong công thức (phần bôi đậm) cho ra từng cell
Ví dụ:
Công thức tại A2: là = P2*C2*1,4+P2*D2*2
Số 1,4 tách ra cho vào B2
Số 2 tách ra cho vào C2


Xin chỉ giáo
 
Lần chỉnh sửa cuối:
Cháo các sư huynh
Ví dụ: Cột A ta có công thức sau



làm cách nào mình có thể lấy ra được số trong công thức (phần bôi đậm) cho ra từng cell
Ví dụ:
Công thức tại A2: là = P2*C2*1,4+P2*D2*2
Số 1,4 tách ra cho vào B2
Số 2 tách ra cho vào C2


Xin chỉ giáo

Hỏi thêm bạn, chỉ có loại biểu thức Tổng của 2 Thương như vậy hay còn thêm các biểu thức khác nữa?
Nếu chỉ có 1 kiểu vậy thì làm tạm :
- 1 name:
PHP:
CB=LEFT(GET.CELL(6,Sheet1!$A2),FIND("+",GET.CELL(6,Sheet1!$A2))-1)
- 1 name:
PHP:
CC=RIGHT(GET.CELL(6,Sheet1!$A2),LEN(GET.CELL(6,Sheet1!$A2))-LEN(Sheet1!$B2))
=> Công thức
- Tại cột B (để lấy giá trị 1,4 chẳng hạn):
PHP:
=--RIGHT(SUBSTITUTE(CB,"*",REPT(" ",LEN(CB))),LEN(CB))
- Tại cột C (để lấy giá trị 2 chẳng hạn):
PHP:
=--RIGHT(SUBSTITUTE(cc,"*",REPT(" ",LEN(cc))),LEN(cc))
 

File đính kèm

  • laygtri_cthuc.xls
    17.5 KB · Đọc: 32
Lần chỉnh sửa cuối:
Upvote 0
Cháo các sư huynh
Ví dụ: Cột A ta có công thức sau

làm cách nào mình có thể lấy ra được số trong công thức (phần bôi đậm) cho ra từng cell
Ví dụ:
Công thức tại A2: là = P2*C2*1,4+P2*D2*2
Số 1,4 tách ra cho vào B2
Số 2 tách ra cho vào C2
Xin chỉ giáo

Bạn sử dụng code sau :
PHP:
Sub TachSo()
Dim i As Long, j As Long
Dim Str() As String
Str = Split(Replace(Replace(Replace(Replace(Replace(Replace(Replace([A1].Formula, "+", " "), "-", " "), "*", " "), "/", " "), "(", " "), ")", " "), "^", " "), " ")
For i = LBound(Str) To UBound(Str)
    If IsNumeric(Str(i)) Then Cells(j + 1, 2) = Str(i): j = j + 1
Next
End Sub
 

File đính kèm

  • Split tach so tu chuoi.xls
    23 KB · Đọc: 30
Upvote 0
Có thể chế hàm tách số của Thầy Tuấn để làm hàm tách số trong hàm

Mã:
Function F2N(rg As Range, Vitri As Long) As String
  Dim Temp1 As String
  Dim Temp2 As Variant, str As Variant
  str = rg.Formula
  With CreateObject("VBScript.RegExp")
     .Pattern = "[^0-9.]"
     .Global = True
     Temp1 = .Replace(str, " ")
  End With
  Temp2 = Split(WorksheetFunction.Trim(Temp1), " ")
  F2N = Temp2(Vitri - 1)
   
End Function
 
Upvote 0
Có thể chế hàm tách số của Thầy Tuấn để làm hàm tách số trong hàm

Mã:
Function F2N(rg As Range, Vitri As Long) As String
  Dim Temp1 As String
  Dim Temp2 As Variant, str As Variant
  str = rg.Formula
  With CreateObject("VBScript.RegExp")
     .Pattern = "[^0-9.]"
     .Global = True
     Temp1 = .Replace(str, " ")
  End With
  Temp2 = Split(WorksheetFunction.Trim(Temp1), " ")
  F2N = Temp2(Vitri - 1)
   
End Function
Không đúng đâu anh ơi. Tác giả nói như vầy :
ST-LU đã viết:
Ví dụ:
Công thức tại A2: là = P2*C2*1,4+P2*D2*2
Số 1,4 tách ra cho vào B2
Số 2 tách ra cho vào C2
 
Upvote 0

File đính kèm

  • TachSoTrongHam.xls
    23.5 KB · Đọc: 25
Upvote 0
Mình tham gia hàm sau:
Mã:
Function NSel(Cl As Range, Vt As Integer) As Double
Dim Fr As String, Ch As String, i, j
Dim tam
Fr = Cl.Formula
Ch = "=*+-/\[]{}^(),"
For i = 1 To Len(Ch)
Fr = Replace(Fr, Mid(Ch, i, 1), "@")
Next
tam = Split(Fr, "@")
j = 1
For i = 0 To UBound(tam)
If IsNumeric(tam(i)) Then
If j = Vt Then
NSel = Val(tam(i)): Exit Function
Else
j = j + 1
End If
End If
Next
End Function
Tại B2 công thức: =NSel(A2,1)
Tại C2 công thức: =NSel(A2,2)
Tại D2 công thức: =NSel(A2,3)
.........................................
 

File đính kèm

  • NSel.xls
    23.5 KB · Đọc: 26
Lần chỉnh sửa cuối:
Upvote 0
Mình tham gia hàm sau:
Mã:
Function NSel(Cl As Range, Vt As Integer) As Double
Dim Fr As String, Ch As String, i, j
Dim tam
Fr = Cl.Formula
Ch = "=*+-/\[]{}^(),"
For i = 1 To Len(Ch)
Fr = Replace(Fr, Mid(Ch, i, 1), "@")
Next
tam = Split(Fr, "@")
j = 1
For i = 0 To UBound(tam)
If IsNumeric(tam(i)) Then
If j = Vt Then
NSel = Val(tam(i)): Exit Function
Else
j = j + 1
End If
End If
Next
End Function
Tại B2 công thức: =NSel(A2,1)
Tại C2 công thức: =NSel(A2,2)
Tại D2 công thức: =NSel(A2,3)
.........................................

Code chạy rất tuyệt Anh Sealand ạh

Anh có thể giải thích qua code để em học hỏi chút được không?

Ví dụ: đặc biệt đoạn này em không hiểu, tại sao có một loạt các ký hiệu trọng nháy nháy " "
PHP:
Ch = "=*+-/\[]{}^(),"

và ký hiệu @ trong hàm split để làm gì?
Cám ơn A nhiều
 
Lần chỉnh sửa cuối:
Upvote 0
Bận quá nên hôm nay mới biết bạn hỏi, thông cảm nha.
Trong toàn bộ công thức trong ô thì các ký tự trong dấu nháy chính là các dấu của các phép tính. Vậy thì ta chia công thức theo các dấu nháy này ta sẽ được các con số và địa chỉ tham chiếu dưới dạng chuỗi. Dùng hàm IsNumber để kiểm tra chọn lấy các con số là được. Mình cho rằng trong công thức không có ký hiệu @ nên mình dùng ký tự này thay toàn bộ các dấu phép tính rồi dùng hàm Split để chia là ta được mảng các thành phần của công thức.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom