Gửi bởi
hung1981
Mình có dãy số ví dụ:
1178.38,1179.02,1177.11,1175.2.................... ..............
Bạn nào giúp mình viết 1 function tách nó thành từng số riêng từng ô tự động mà không giới hạn số trong dãy đó
ví dụ: dãy đó mình đặt ở ô A1 thì sẽ tách tự động sang các cột riêng B1, C1...
Vấn đề nảy đã có nhiều trên GPE, nhưng thường chỉ giải quyết trong 1 trường hợp cụ thể.
Để hàm mang tính tổng quát, phải giải quyết 2 yêu cầu:
1. Cho phép thay đổi dấu tách trong hàm.
2. Có thể fill công thức sang ô khác mà hàm tách đúng số 1, số 2, ... theo thứ tự fill. Tức là hàm phải có khả năng nhận biết vị trí của nó so với ô chứa hàm đầu tiên.
Muốn thế, hàm cần thiết phải có 3 đối số:
number: chuỗi cần tách số
str: chuỗi ngăn cách các số trong number
idCol hoặc idRow: số thứ tự cột, dòng ô đầu tiên chứa hàm tách số. Hàm các ô khác căn cứ vào số này để biết vị trí số cần tách.
Do có thể fill cột, fill dòng nên có 2 hàm riêng biệt
Mã:
Function TachSoCol(number As String, str As String, idC1 As Long) As Double
Dim idC2 As Long, arNum, SoTach
idC2 = Application.Caller.Column
arNum = Split(number, str)
SoTach = Trim(arNum(idC2 - idC1))
If IsNumeric(SoTach) Then
TachSoCol = CDbl(SoTach)
Else
For i = 1 To Len(SoTach)
If IsNumeric(Mid(SoTach, i, 1)) Then
TachSoCol = TachSoCol & Mid(SoTach, i, 1)
End If
Next
End If
End Function
Mã:
Function TachSoRow(number As String, str As String, idR1 As Long) As Double
Dim idR2 As Long, arNum, SoTach
idR2 = Application.Caller.Row
arNum = Split(number, str)
SoTach = Trim(arNum(idR2 - idR1))
If IsNumeric(SoTach) Then
TachSoRow = CDbl(SoTach)
Else
For i = 1 To Len(SoTach)
If IsNumeric(Mid(SoTach, i, 1)) Then
TachSoRow = TachSoRow & Mid(SoTach, i, 1)
End If
Next
End If
End Function
Chuỗi cần tách tại B2
Công thức tách cột tại C2=TachSoCol($B$2;"/";3)
số 3 là số thứ tự cột C2, fill công thức sang các ô D2, E2, F2, G2. Tại G2 báo lỗi #VALUE! vì vượt số cần tách.
Công thức tách dòng B5=TachSoRow($B$2;"/";5)
số 5 là số thứ tự dòng B5, fill công thức xuống B6, B7, B8.
Chú ý:
1. Hàm sau khi tách chuỗi, kiểm tra chuỗi cần tách, nếu không phải là số sẽ loại tất cả các ký tự không phải số ra khỏi chuỗi.
2. Đối với dấu ngàn, dấu thập phân: nếu Excel nhận dạng đúng sẽ giữ nguyên, nếu sai sẽ loại các dấu đó ra khỏi chuỗi,