LinDan
Thành viên tiêu biểu

- Tham gia
- 8/2/12
- Bài viết
- 412
- Được thích
- 111
Em chưa biết khi tách số ra khỏi chuối thì Excel phân biệt chúng dựa vào hàm nào, xin hướng dẫn dùm em bài toán tách số khỏi chuối nếu phải làm bằng công thức thì viết ra sao
![]()
Em xin cảm ơn.
Vấn đề này đã có rất nhiều trên Diễn đànEm chưa biết khi tách số ra khỏi chuối thì Excel phân biệt chúng dựa vào hàm nào, xin hướng dẫn dùm em bài toán tách số khỏi chuối nếu phải làm bằng công thức thì viết ra sao
![]()
Em xin cảm ơn.
Vấn đề này đã có rất nhiều trên Diễn đàn
Bạn search trên diễn đàn với từ khóa "Tách số từ chuỗi"
Mình nhớ có bài của bác ndu rất hay tách được số trong nhiều trường hợp
Em cũng xem cách của thầy rồi, em nghĩ thầy sẽ nghĩ ra cách thay text bằng khoảng trắng hoặc là cái gì đó, cho kết quả vào cột phụ rồi tách sau được không thầy?Tôi không có bài viết nào tương tự như thế này đâu nha!
Tôi post bài về tách số là TÁCH TẤT TẦN TẬT, không phải tách TỪNG ĐOẠN như thế này đâu
Em thấy có 1 bài của bác giúp thành viên nào đó (em đã tải về) tách bằng công thức nàyTôi không có bài viết nào tương tự như thế này đâu nha!
Tôi post bài về tách số là TÁCH TẤT TẦN TẬT, không phải tách TỪNG ĐOẠN như thế này đâu
Em cũng xem cách của thầy rồi, em nghĩ thầy sẽ nghĩ ra cách thay text bằng khoảng trắng hoặc là cái gì đó, cho kết quả vào cột phụ rồi tách sau được không thầy?
Tôi không có bài viết nào tương tự như thế này đâu nha!
Tôi post bài về tách số là TÁCH TẤT TẦN TẬT, không phải tách TỪNG ĐOẠN như thế này đâu
Bạn làm như bài #6 chắc là OK đó. Các kiểu dữ liệu hay số các vị trí khác nhau trong chuỗi đều tách được.!Vâng, thày giúp em tách tất tần tật cũng được ah, em chỉ muốn tìm hiểu bản chất phân biệt giữa số và chữ thể hiện ở thao tác nào ah?
Vâng, thày giúp em tách tất tần tật cũng được ah, em chỉ muốn tìm hiểu bản chất phân biệt giữa số và chữ thể hiện ở thao tác nào ah?
Sub tach_so()
Dim chuoi, tam, kq
chuoi = [A2]
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = "\d+"
Set tam = .Execute(chuoi)
For Each kq In tam
MsgBox kq
Next
End With
End Sub
Cám ơn anh Quang Hải và mọi người đã giúp em, thực ra bài toán này hiện tại em mới chỉ nghĩ ra để nghiên cứu. Em vẫn biết VBA sẽ ra kết quả nhanh nhất, nhưng thời gian này em vẫn muốn làm bằng công thức (hạn chế tối đa công cụ có sẵn trong Excel, VBA bởi những cách đó áp dụng thực tế rất hay nhưng em không hiểu cơ sở của thuật toán giải xuất phát từ đâu) .
Sub tach_so()
Dim tam, kq(), dl(), i As Long, n As Byte, j As Byte
dl = Range([A2], [A65536].End(3)).Value
For i = 1 To UBound(dl)
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = "\d+"
Set tam = .Execute(dl(i, 1))
n = IIf(tam.Count > n, tam.Count, n)
ReDim Preserve kq(1 To UBound(dl), 1 To n)
For j = 0 To tam.Count - 1
kq(i, j + 1) = tam(j)
Next
End With
Next
[B2].Resize(i - 1, n) = kq
End Sub
Code này lấy số thì Ok thôi, nhưng muốn an toàn, tránh trường hợp có thể bị lỗi do có cell nào đó trong vùng dữ liệu không chứa ký tự số, nên chăng kiểm tra dữ liệu trước khi gán giá trị vào mảng kq ( dĩ nhiên nếu đề bài không yêu cầu thì ta cũng .....cóc cần kiểm tra)Khi nào bạn thấy uể oải với công thức thì nghiên cứu code này nhé. Mình viết đầy đủ và cho xuất ra kết quả luôn đấy. Tuy nhiên cũng hơi phức tạp vì kết hợp nhiều kiến thức cơ bản.
PHP:Sub tach_so() Dim tam, kq(), dl(), i As Long, n As Byte, j As Byte dl = Range([A2], [A65536].End(3)).Value For i = 1 To UBound(dl) With CreateObject("vbscript.regexp") .Global = True .Pattern = "\d+" Set tam = .Execute(dl(i, 1)) n = IIf(tam.Count > n, tam.Count, n) ReDim Preserve kq(1 To UBound(dl), 1 To n) For j = 0 To n - 1 kq(i, j + 1) = tam(j)$ Next End With Next [B2].Resize(i - 1, n) = kq End Sub
Code này lấy số thì Ok thôi, nhưng muốn an toàn, tránh trường hợp có thể bị lỗi do có cell nào đó trong vùng dữ liệu không chứa ký tự số, nên chăng kiểm tra dữ liệu trước khi gán giá trị vào mảng kq ( dĩ nhiên nếu đề bài không yêu cầu thì ta cũng .....cóc cần kiểm tra)
Híc