Dùng hàm VBA gì để tách ký tự theo một điều kiện cho trước?

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

BNTT

Bùi Nguyễn Triệu Tường
Thành viên danh dự
Tham gia
3/7/07
Bài viết
4,946
Được thích
23,208
Nghề nghiệp
Dạy đàn piano
Vấn đề tôi hỏi đây, là để tách ra chiều rộng và chiều dài của một hình chữ nhật, từ một con số chỉ kích thước cho trước.

Ví dụ:
  • kích thước = 20x25, thì chiều rộng là 25 và chiều dài là 20
  • kích thước = 1.5x7, thì chiều rộng là 1.5 và chiều dài là 7
Giả sử, kích thước (KT) được nhập với quy tắc là con số bên trái dấu "x" chỉ chiều rộng, và con số bên phải dấu "x" chỉ chiều dài, không có khoảng trắng nào trong KT, thì trong Excel, dùng công thức để tách rất dễ:
Chiều rộng = CR = LEFT(KT, FIND("x", KT) - 1) * 1

Chiều dài = CD = RIGHT(KT, LEN(KT) - LEN(CR) + 1) * 1

Xin cho hỏi, trong VBA thì viết như thế nào ? Dùng hàm gì?

(giả sử KT được nhập trong Textbox1, và con số chiều dài, chiều rộng sau khi lấy ra có thể dùng để tính toán được, ví dụ: tính diện tích)
 
Lần chỉnh sửa cuối:
Dùng hàm mảng xem nha!
PHP:
Function tach(dl As String, kytu As String, so As Integer) Dim strarray() As String strarray = Split(dl, kytu) tach = strarray(so - 1) End Function
Bác xem ví dụ sẽ hiểu ngay. Thân.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Vấn đề tôi hỏi đây, là để tách ra chiều rộng và chiều dài của một hình chữ nhật, từ một con số chỉ kích thước cho trước.

Ví dụ:
  • kích thước = 20x25, thì chiều rộng là 25 và chiều dài là 20
  • kích thước = 1.5x7, thì chiều rộng là 1.5 và chiều dài là 7
Giả sử, kích thước (KT) được nhập với quy tắc là con số bên trái dấu "x" chỉ chiều rộng, và con số bên phải dấu "x" chỉ chiều dài, không có khoảng trắng nào trong KT, thì trong Excel, dùng công thức để tách rất dễ:
Chiều rộng = CR = LEFT(KT, FIND("x", KT) - 1) * 1

Chiều dài = CD = RIGHT(KT, LEN(KT) - LEN(CR) + 1) * 1
Xin cho hỏi, trong VBA thì viết như thế nào ? Dùng hàm gì?
(giả sử KT được nhập trong Textbox1, và con số chiều dài, chiều rộng sau khi lấy ra có thể dùng để tính toán được, ví dụ: tính diện tích)
Hàm tính chiều dài:
Mã:
Function CD(text As String) As Double
CD = Left(text, InStr(1, text, "x") - 1)
End Function
Hàm tính chiều rộng:
Mã:
Function CR(text As String) As Double
CR = Mid(text, InStr(1, text, "x") + 1)
End Function
Chú ý nhập 1.5x7 hay 1,5x7 phải đúng với khai báo trong Regional and Language Options
 
Upvote 0
Cảm ơn Po_Pikachu, nếu dùng nó làm UDF thì rất tốt.
Nhưng viết vào trong code luôn thì sao?
Ví dụ, mình có đoạn code:
PHP:
'Kích thước' KT = MASO.Column(3)
'Chiều dài' CD = ?
'Chiều rộng' CR = ?
'Diện tích' DT = CD * CR
Chỗ cái ?, viết như thế nào?
 
Upvote 0
Cảm ơn Po_Pikachu, nếu dùng nó làm UDF thì rất tốt. Nhưng viết vào trong code luôn thì sao? Ví dụ, mình có đoạn code:
PHP:
'Kích thước' KT = MASO.Column(3) 'Chiều dài' CD = ? 'Chiều rộng' CR = ? 'Diện tích' DT = CD * CR
Chỗ cái ?, viết như thế nào?
Chẳng phải vậy sao? CD =tach(KT,"x",1) CR =tach(KT,"x",2) Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
Chẳng phải vậy sao?
CD =tach(KT,"x",1)
CR =tach(KT,"x",2)
Thân.
Nghĩa là phải copy cái UDF đó vào trong cửa sổ VBA luôn, rồi gọi nó chạy ngay trong VBA cũng được ? Coi như nó là một hàm của VBA ?

Cái hướng dẫn của thầy Long cũng làm y như vậy ?
 
Upvote 0
Em góp thêm một code chân quê chút xíu:
Xử lý sự kiện textbox Kích thước after_update
PHP:
Private Sub txtKT_AfterUpdate()
On Error Resume Next
Dim zM As Long
zM = Application.WorksheetFunction.Find("x", txtKT) - 1
txtCR.Value = Val(Left(txtKT, zM))
txtCD.Value = Val(Right(txtKT, Len(txtKT) - zM - 1))
End Sub
Anh xem thêm file đính kèm nhé!
 

File đính kèm

Upvote 0
Vâng, viết y như vậy trong cửa sổ VBA luôn. Chỉ cần đặt Function trong Module là dùng được cả trang Excel lẫn VBA luôn?????????? Cái của thầy Long cũng y như vậy. ?? :cc_confused:===\.-0-/.
 
Lần chỉnh sửa cuối:
Upvote 0
@ To BNTT
Anh tham khảo thêm các UF FieldSplit của bác SA và của Cu Tí tại đây có vẻ khái quát hơn.

TDN
 
Upvote 0
Có lẽ bạn BNTT chưa biết đưa phần tính toán ngoài bảng tính vào Function thôi... vậy nó là.. đây: (thật ra sẽ có cách khác ngắn hơn rất nhiều)
PHP:
Function DaiRong(KT As String, Chieu As Boolean) As Double
  Dim Fnc As WorksheetFunction
  Dim Dai As String, Rong As String
  Set Fnc = Application.WorksheetFunction
  Dai = Left(KT, Fnc.Find("x", KT) - 1) 
  Rong = Right(KT, Len(KT) - Len(Dai) - 1) 
  If Chieu Then
    DaiRong = Dai * 1
  Else:
    DaiRong = Rong * 1
  End If
End Function
Thêm tùy chọn Chieu vào để xác định kích thước mà ta cần lấy là DÀI hay RỘNG
 

File đính kèm

Upvote 0
Vấn đề tôi hỏi đây, là để tách ra chiều rộng và chiều dài của một hình chữ nhật, từ một con số chỉ kích thước cho trước.
Ví dụ:
  • kích thước = 20x25, thì chiều rộng là 25 và chiều dài là 20
  • kích thước = 1.5x7, thì chiều rộng là 1.5 và chiều dài là 7
Giả sử, kích thước (KT) được nhập với quy tắc là con số bên trái dấu "x" chỉ chiều rộng, và con số bên phải dấu "x" chỉ chiều dài, không có khoảng trắng nào trong KT, thì trong Excel, dùng công thức để tách rất dễ:
Chiều rộng = CR = LEFT(KT, FIND("x", KT) - 1) * 1

Chiều dài = CD = RIGHT(KT, LEN(KT) - LEN(CR) + 1) * 1
Xin cho hỏi, trong VBA thì viết như thế nào ? Dùng hàm gì?

(giả sử KT được nhập trong Textbox1, và con số chiều dài, chiều rộng sau khi lấy ra có thể dùng để tính toán được, ví dụ: tính diện tích)
BNTT sử dụng các hàm tính chiều dài CD, chiều rộng CR, diện tích DT như cac hàm của Excel nếu các hàm này viết trong module của workbook.
|
A​
|
B​
|
C​
|
D​
|
1​
|
Kích thước​
|
dài​
|
rộng​
|
diện tích​
|
2​
|20x25|
20​
|
25​
|
500​
|
3​
| | =CD(A1)| =CR(A1)| =DT(A1)|
Hàm tính diện tích:
Mã:
Function DT(text As String) As Double
dai = Left(text, InStr(1, text, "x") - 1)
rong = Mid(text, InStr(1, text, "x") + 1)
DT = dai * rong
End Function
 
Upvote 0
Web KT

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

Back
Top Bottom