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...
Bạn cũng có thể dùng một chương trình soạn thảo thay thế "," bằng TAB rồi dán vào Excel, mặc định nó sẽ theo cột.
Nếu thay thế bằng xuống dòng (^p) trong word ==> dòng.
Mình cũng hay có những dãy số có dấu phẩy cần phải tác riêng ra các hàng. Mình chỉ làm thủ công là copy nó ra file txt sau đó mở lại file đó bằng excel là được. Nó tự tách luôn. Nhưng nếu được các anh cao thủ viết cho cái Funtion bằng maco thì thật tốt. Các anh giúp chúng em với !
Mình cũng hay có những dãy số có dấu phẩy cần phải tác riêng ra các hàng. Mình chỉ làm thủ công là copy nó ra file txt sau đó mở lại file đó bằng excel là được. Nó tự tách luôn. Nhưng nếu được các anh cao thủ viết cho cái Funtion bằng maco thì thật tốt. Các anh giúp chúng em với !
Bạn chép đoạn code này vào module, sau đó tạo một nút lệnh (hoặc phím tắt) kích thủ tục này chạy, trước khi chạy phải chọn vùng cần tách số (có thể là 1 ô hoặc nhiều dòng, nhưng chỉ duy nhất 1 cột)
Trong file ví dụ, bạn kéo chuột chọn từ ô A4:A6, sau đó click nút [Process]
trong hộp input box gõ vào B8, dữ liệu sẽ được tách ra và copy bắt đầu từ ô B8.
PHP:
Sub TextToColumn()
On Error GoTo ErrorText
a = InputBox("Chon vung can luu du lieu", "Input Box")
Selection.TextToColumns Destination:=Range(a), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
Exit_ErrorText:
Exit Sub
ErrorText:
MsgBox Err.Number & Space(2) & Err.Description & Chr(13) & _
"Co le ban chua chon o can tach so lieu, vui long chon o can tach so lieu"
Resume Exit_ErrorText
End Sub
Cảm ơn các anh, các bạn đã nhiệt tình gúp đỡ, em vẫn dung Excel trong công việc nhưng không biết VBA lên chỉ làm thủ công mất rất nhiều thời gian, nay vào GPE được các anh, các bạn giúp đỡ nhiệt tình em được mở rộng tầm hiểu biết rất nhiều. Xin cảm ơn chân thành tới GPE đã cho chúng em một sân chơi bổ ích như thế này !!!
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...
Đầu tiên thay ký tự "," thành " " (thay dấu phẩy thành ký tự rổng)
Tiếp theo đưa bài toán về bài toán tách họ và tên
Đây cũng là 1 giãi pháp!
(Search tìm trên diển đàn với từ khóa "TÁCH TÊN")
Mến
ANH TUẤN
Dạ em biết công thức của em thừa rồi! Cẩn thận quá mức nhiều khi cũng không hay! Khi làm thì nghĩ nếu lấy MID với thứ tự lớn hơn độ dài chuỗi thì nó sẽ báo lỗi, rốt cục nó lại không báo lỗi! Hóa ra bẫy lỗi thừa!
cảm ơn bạn nhưng cái công thức này chỉ làm được với 1 dòng thôi hả, còn nhiều dòng thì phải đổi thành=MID($A1, COLUMN(A$1), 1) mà mình chỉ làm được khi số ở cột A thôi hả còn mình thử để số ở ô khác thì lại không được ví dụ mình số 789642 ở ô G10 mình đánh hàm =MID($G10,COLUMN(G$10),1) ở ô H10 lại không được
Thì đúng rồi! Tùy từng bài toán cụ thể mà bạn đặt dấu $ vào đâu chứ! Cái này căn bản mà bạn!
Thêm nữa, bạn phải biết hàmn Column() nó trả về giá trị gì thì mới dùng được! Bây giờ bạn thử gõ =Column(G10) vào một ô nào đó xem coi giá trị của nó bao nhiêu rồi rút ra kết luận!
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,
Bạn chép đoạn code này vào module, sau đó tạo một nút lệnh (hoặc phím tắt) kích thủ tục này chạy, trước khi chạy phải chọn vùng cần tách số (có thể là 1 ô hoặc nhiều dòng, nhưng chỉ duy nhất 1 cột)
Trong file ví dụ, bạn kéo chuột chọn từ ô A4:A6, sau đó click nút [Process]
trong hộp input box gõ vào B8, dữ liệu sẽ được tách ra và copy bắt đầu từ ô B8.
PHP:
Sub TextToColumn()
On Error GoTo ErrorText
a = InputBox("Chon vung can luu du lieu", "Input Box")
Selection.TextToColumns Destination:=Range(a), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
Exit_ErrorText:
Exit Sub
ErrorText:
MsgBox Err.Number & Space(2) & Err.Description & Chr(13) & _
"Co le ban chua chon o can tach so lieu, vui long chon o can tach so lieu"
Resume Exit_ErrorText
End Sub
Function TachChuoiSo(NumString As String, PhC As String)
Dim Arr, jJ As Integer, SoFT As Byte
Arr = Split(NumString, PhC)
SoFT = 1 + UBound(Arr): ReDim MDL(SoFT, 1) As Long
For jJ = 1 To SoFT
MDL(jJ, 1) = CLng(Arr(jJ - 1))
Next jJ
TachChuoiSo = MDL
End Function
Cách dùng: Dùng chuột tô chọn gần chục ô liên tục trong 1 cột chưa dữ liệu;
Sau đó bấm chuột lên thanh công thức & nhập cú fáp =TachChuoiSo(B3,",")
Cuối cùng kết thúc bằng tổ hợp fím giành cho hàm mảng.