Tạo Function chuyển chuổi thành nhiều cells

Liên hệ QC

duyamadet

Thành viên mới
Tham gia
16/3/07
Bài viết
24
Được thích
3
Chào anh chị,
Em cần chuyển một chuỗi các số cách nhau bằng dấu phẩy thành nhiều ô trên cùng một cột, mỗi ô là một số trong chuỗi trên. Ví dụ:
A1 = 123,456,789,100,
Tại A2 nhập =TACH_CHUOI(A1) thì được kết quả:
A2=123
A3=456
A4=789
A5=100

Em thử code này ở dạng Sub thì chạy được, nhưng chuyển thành dạng Function thì không chạy. Nhờ anh chị xem giúp.
Mã:
Function TACH_CHUOI(VungChon As String)
Dim Result() As String
Dim NoiDen As String
'VungChon = "123,456,789,100,101,102"    '-> hien tung so'
'VungChon = "Hello world hello people"    '-> hien tung chu'
Result() = Split(VungChon)
NoiDen = Application.ThisCell.Offset(1, 0).Address
'NoiDen = Application.ActiveCell.Offset(1, 0).Address
Range(NoiDen).Resize(UBound(Result) + 1, 1).Value = WorksheetFunction.Transpose(Result())
End Function

Em cảm ơn.
 
Chào anh chị,
Em cần chuyển một chuỗi các số cách nhau bằng dấu phẩy thành nhiều ô trên cùng một cột, mỗi ô là một số trong chuỗi trên. Ví dụ:
A1 = 123,456,789,100,
Tại A2 nhập =TACH_CHUOI(A1) thì được kết quả:
A2=123
A3=456
A4=789
A5=100

Em thử code này ở dạng Sub thì chạy được, nhưng chuyển thành dạng Function thì không chạy. Nhờ anh chị xem giúp.
Mã:
Function TACH_CHUOI(VungChon As String)
Dim Result() As String
Dim NoiDen As String
'VungChon = "123,456,789,100,101,102"    '-> hien tung so'
'VungChon = "Hello world hello people"    '-> hien tung chu'
Result() = Split(VungChon)
NoiDen = Application.ThisCell.Offset(1, 0).Address
'NoiDen = Application.ActiveCell.Offset(1, 0).Address
Range(NoiDen).Resize(UBound(Result) + 1, 1).Value = WorksheetFunction.Transpose(Result())
End Function

Em cảm ơn.
Bạn xem bài này chưa? https://www.giaiphapexcel.com/diend...dữ-liệu-dựa-vào-dấu-và-copy-theo-dòng.160100/
 
Upvote 0
Chào anh chị,
Em cần chuyển một chuỗi các số cách nhau bằng dấu phẩy thành nhiều ô trên cùng một cột, mỗi ô là một số trong chuỗi trên. Ví dụ:
A1 = 123,456,789,100,
Tại A2 nhập =TACH_CHUOI(A1) thì được kết quả:
A2=123
A3=456
A4=789
A5=100

Em thử code này ở dạng Sub thì chạy được, nhưng chuyển thành dạng Function thì không chạy. Nhờ anh chị xem giúp.
Mã:
Function TACH_CHUOI(VungChon As String)
Dim Result() As String
Dim NoiDen As String
'VungChon = "123,456,789,100,101,102"    '-> hien tung so'
'VungChon = "Hello world hello people"    '-> hien tung chu'
Result() = Split(VungChon)
NoiDen = Application.ThisCell.Offset(1, 0).Address
'NoiDen = Application.ActiveCell.Offset(1, 0).Address
Range(NoiDen).Resize(UBound(Result) + 1, 1).Value = WorksheetFunction.Transpose(Result())
End Function

Em cảm ơn.
Function chuyển thế này thì chạy sao được, bảo chính chủ viết sub họ chuyển cho.
 
Upvote 0
Chào anh chị,
Em cần chuyển một chuỗi các số cách nhau bằng dấu phẩy thành nhiều ô trên cùng một cột, mỗi ô là một số trong chuỗi trên. Ví dụ:
A1 = 123,456,789,100,
Tại A2 nhập =TACH_CHUOI(A1) thì được kết quả:
A2=123
A3=456
A4=789
A5=100

Em thử code này ở dạng Sub thì chạy được, nhưng chuyển thành dạng Function thì không chạy. Nhờ anh chị xem giúp.
Mã:
Function TACH_CHUOI(VungChon As String)
Dim Result() As String
Dim NoiDen As String
'VungChon = "123,456,789,100,101,102"    '-> hien tung so'
'VungChon = "Hello world hello people"    '-> hien tung chu'
Result() = Split(VungChon)
NoiDen = Application.ThisCell.Offset(1, 0).Address
'NoiDen = Application.ActiveCell.Offset(1, 0).Address
Range(NoiDen).Resize(UBound(Result) + 1, 1).Value = WorksheetFunction.Transpose(Result())
End Function

Em cảm ơn.
Cái này khó nếu mà viết hàm theo kiểu chọn 1 vùng có sẵn thì đơn giản.Nhưng mà muốn 1 ô mà nó ra toàn bộ các dòng ở dưới thì cần sử lý nhiều vấn đề lắm.
 
Upvote 0
Tương tự bài này, mới làm xong, khác dấu ";" và "," thôi
 
Upvote 0
Chào anh chị,
Em cần chuyển một chuỗi các số cách nhau bằng dấu phẩy thành nhiều ô trên cùng một cột, mỗi ô là một số trong chuỗi trên. Ví dụ:
A1 = 123,456,789,100,
Tại A2 nhập =TACH_CHUOI(A1) thì được kết quả:
A2=123
A3=456
A4=789
A5=100

Em thử code này ở dạng Sub thì chạy được, nhưng chuyển thành dạng Function thì không chạy. Nhờ anh chị xem giúp.
Mã:
Function TACH_CHUOI(VungChon As String)
Dim Result() As String
Dim NoiDen As String
'VungChon = "123,456,789,100,101,102"    '-> hien tung so'
'VungChon = "Hello world hello people"    '-> hien tung chu'
Result() = Split(VungChon)
NoiDen = Application.ThisCell.Offset(1, 0).Address
'NoiDen = Application.ActiveCell.Offset(1, 0).Address
Range(NoiDen).Resize(UBound(Result) + 1, 1).Value = WorksheetFunction.Transpose(Result())
End Function

Em cảm ơn.
Thớt thử xem nha.
Option là ký tự muốn tách, để trống là mỗi ký tự ra 1 ô.
=T_tachchuoi("ô cần tách", "option ký tự mốc")
Muốn dọc lại thì thớt lồng Transpose vào.

Mã:
Function T_Tachchuoi(str As String, Optional txt As String)
Application.Volatile
Dim i As Integer, z As Integer, x As Integer, a As Integer
Name = Application.WorksheetFunction.Trim(Application.WorksheetFunction.Substitute(str, Chr(160), Chr(32)))
z = 0: a = 1: x = 1
For i = 1 To Len(Name)
     If Mid(Name, i, Len(txt)) = txt Or i = Len(Name) Then z = z + 1
Next
ReDim Arr(0, 1 To z)
For i = 2 To Len(Name) + 1
     If Mid(Name, i, Len(txt)) = txt Or i = Len(Name) Then
          Arr(0, x) = Replace(Mid(Name, a, i - a + Len(txt)), txt, "")
          a = i
          x = x + 1
     End If
Next
T_Tachchuoi = Arr
End Function
 
Upvote 0
Function chuyển thế này thì chạy sao được, bảo chính chủ viết sub họ chuyển cho.
Cái này tôi chỉ vài lần rồi.
Khi Function trả về 1 mảng thì bên worksheet dùng cách nạp hàm mảng để ghi (chọn nhiều ô và Ctrl+Shift+Enter); HOẶC dùng Index để ghi từng ô.

Giả sử hàm MangTui trả về một mảng n phần tử:
Cách 1:
- Gõ Columns(MangTui(x)) vào ô đầu tiên. Hàm sẽ cho biết nó trả về bao nhiêu phần tử (n)
- Chọn n ô kề nhau
- Xoá Columns( ), kế đó Ctrl+Shift+Enter
Cách 2:
- Gõ Index(MangTui(x), Column(A:A)) vào ô đầu tiên
- Kéo ngang ra cho đến hết
 
Upvote 0
Cái này tôi chỉ vài lần rồi.
Khi Function trả về 1 mảng thì bên worksheet dùng cách nạp hàm mảng để ghi (chọn nhiều ô và Ctrl+Shift+Enter); HOẶC dùng Index để ghi từng ô.

Giả sử hàm MangTui trả về một mảng n phần tử:
Cách 1:
- Gõ Columns(MangTui(x)) vào ô đầu tiên. Hàm sẽ cho biết nó trả về bao nhiêu phần tử (n)
- Chọn n ô kề nhau
- Xoá Columns( ), kế đó Ctrl+Shift+Enter
Cách 2:
- Gõ Index(MangTui(x), Column(A:A)) vào ô đầu tiên
- Kéo ngang ra cho đến hết
Cách 3 anh ơi.Chỉ cần chọn công thức 1 ô thôi.
 
Upvote 0
Cách 3 anh ơi.Chỉ cần chọn công thức 1 ô thôi.
Cũng không phải là không làm được. Nhưng rước nhiều cái phức tạp vào không đáng. Chỉ dùng để biểu diễn code thôi.
Thì giờ và tâm não để vào việc làm quen với dữ liệu sẽ có lợi hơn cho tương lai (xem bài tôi bàn trong các thớt "Data Science/Data Analytics")

Chú:
1. Các cách tôi chỉ ở trên là kinh điển. Tôi học ở các khoá dạy về bảng tính chứ không phải do tôi chế ra.
2. Nếu dùng 356 hoặc 2021 thì có thể làm dễ hơn.
 
Upvote 0
Web KT

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

Back
Top Bottom