Xin chỉ dùm Excel tách số ra khỏi chuối dùng hàm gì

Liên hệ QC

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

Tachso_zpsaabdd278.jpg


Em xin cảm ơn.
 

File đính kèm

  • Tach so.xlsx
    9.5 KB · Đọc: 45
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

Tachso_zpsaabdd278.jpg


Em xin cảm ơn.

Mình nghĩ cái này chỉ có VBA mới làm được.
 
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

Tachso_zpsaabdd278.jpg


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
 
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

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
 
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 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ày
=IF(COUNT(Temp)=0;"";SUMPRODUCT((1*MID($A10;SMALL(Temp;ROW(INDIRECT("1:"&COUNT(Temp))));1))*(10^(COUNT(Temp)-ROW(INDIRECT("1:"&COUNT(Temp)))))))
với name Temp=IF(ISNUMBER(1*MID(Sheet1!$A10;ROW(INDIRECT("1:"&LEN(Sheet1!$A10)));1));ROW(INDIRECT("1:"&LEN(Sheet1!$A10)));"")
Bác có thể "chế biến" công thức trên để phù hợp với bài #1 được không a?
 
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?

Nhớ không lầm thì trước đây Huuthang_bd đã từng làm bài dạng này rồi (tôi không nhớ)
Có điều nếu làm được thì công thức cũng rất khủng ---> Trường hợp này tôi dùng VBA cho khỏe (chỉ vài dòng code là xong)
 
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

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?
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?

Bài này đơn giản thôi, cần gì phải tới phiên anh NDU ra tay. Mình ví dụ 1 ô A2 nhé

PHP:
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) .
 
Bạn xem thử cách dùng công thức excel trong file đính kèm này nhé.
 

File đính kèm

  • Tach so.zip
    5 KB · Đọc: 53
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) .

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 tam.Count - 1
         kq(i, j + 1) = tam(j)
       Next
   End With
Next
[B2].Resize(i - 1, n) = kq
End Sub
 
Lần chỉnh sửa cuối:
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
 
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

Híc híc, code em viết bị lỗi mà anh đem trích dẫn cái sai của em, làm cho em không sửa được lỗi.

For j = 0 to n -1
là phá sản anh ơi, mới test lại mới phát hiện ra.

...............................................

Nếu bài nào cũng viết cho code chay thật êm không có gì để sửa thì có lẽ cuộc sống này nhàm chán lắm anh nhỉ.
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom