Tách chuỗi có chữ số và những ký tự đặc biệt

Liên hệ QC

tutientrung

Thành viên hoạt động
Tham gia
10/3/07
Bài viết
151
Được thích
222
Nghề nghiệp
Quản lý SX
mình có chuỗi này cần tách ra 8 cột khác nhau:
chuỗi cần tách
SETUP3 (500 ; 4.5 / 400 ; 3 / 15 ; 0.5 / 70 ; 2)
tách thành 8 cột
1 2 3 4 5 6 7 8
500 4.5 400 3 15 .0.5 70 2

chi tiết mình có ghi trong file đính kèm

XIN CÁM ƠN CÁC BẠN NHIỀU NHIỀU .
 

File đính kèm

  • TACH CHUOI DAI.xls
    27 KB · Đọc: 43

File đính kèm

  • TACH CHUOI DAI.xls
    57 KB · Đọc: 49
mình có chuỗi này cần tách ra 8 cột khác nhau:
chuỗi cần tách
SETUP3 (500 ; 4.5 / 400 ; 3 / 15 ; 0.5 / 70 ; 2)
tách thành 8 cột
1 2 3 4 5 6 7 8
500 4.5 400 3 15 .0.5 70 2

chi tiết mình có ghi trong file đính kèm

XIN CÁM ƠN CÁC BẠN NHIỀU NHIỀU .
Tách cái này mà code thì nó làm cái rẹt là ra
-------------
Hứng lên làm bằng công thức chơi đây!
 

File đính kèm

  • TACH CHUOI DAI(3).xls
    37 KB · Đọc: 102
Cám ơn bác NDU rất nhiều .Có một số dòng hiển thị không chính xác vị trí cột .
Mình có chèn thêm dòng hiển thị đúng màu xanh và tô dòng màu vàng cho dòng hiển thị sai vị trí .
Nhờ bác NDU coi lại giúp . Rất cám ơn bác .Nếu được thì bác cho xin cái code nha bác !--=0
 

File đính kèm

  • TACH CHUOI DAI(3).xls
    41 KB · Đọc: 21
Lần chỉnh sửa cuối:
Cám ơn bác NDU rất nhiều .Có một số dòng hiển thị không chính xác vị trí cột .
Mình có chèn thêm dòng hiển thị đúng màu xanh và tô dòng màu vàng cho dòng hiển thị sai vị trí .
Nhờ bác NDU coi lại giúp . Rất cám ơn bác .Nếu được thì bác cho xin cái code nha bác !--=0
Mấy chiêu này tôi học từ anh NDU và múa lại.
PHP:
Function Tachchu(Chuoi As Range, Vitri As Long) As String
Dim vt As Long, Temp As Variant, iText As String
If Len(Chuoi) = 0 Then
  Tachchu = 0
  Exit Function
End If
vt = InStr(Chuoi, "(")
If vt = 0 Then
  iText = Chuoi
Else
  iText = Mid(Chuoi, vt + 1, Len(Chuoi) - vt + 1)
End If
iText = Replace(iText, ")", "")
iText = Replace(iText, ";", vbBack)
iText = Replace(iText, "/", vbBack)
Temp = Split(iText, vbBack)
Tachchu = Temp(Vitri - 1)
End Function
Cú pháp
=tachchu(chuoi,cột lấy)
Lưu ý, còn hiện những số 0 thì thêm 1 bước. Trước mắt mới làm được vậy.
Đính kèm file
 

File đính kèm

  • TACH CHUOI DAI(3).xls
    62.5 KB · Đọc: 47
Lần chỉnh sửa cuối:
Cám ơn bạn Thunghi nhiều nhưng chưa đúng yêu cầu của mình(báo lỗi ,mình không biết xly lỗi ra sao cả ).Nếu bạn test thử mà OK như file số (3)mình gửi ở trên thì gửi cho mình nha.
Bài mình gửi bạn NDU đã giải bằng công thức rất hay ,nhưng vẫn còn một vài chuỗi dữ liệu(là do chuỗi thay đổi theo đơn hàng đặt ,chuỗi chuẩn là đầy đủ 8 số >>tương ứng với 4 bộ phận (tính từ trái sang phải) .Do đó khi có một đơn hàng nào đó chỉ cần 2 bộ phận thì khi xử lý ra dữ liệu sẽ có 4 số 0 ,vị trí phải đúng theo chuỗi quy định .Những dòng mà mình tô vàng là chưa đạt yêu cầu.
Cám ơn bạn đã tham gia vào bài.
 
Lần chỉnh sửa cuối:
Cám ơn bác NDU rất nhiều .Có một số dòng hiển thị không chính xác vị trí cột .
Mình có chèn thêm dòng hiển thị đúng màu xanh và tô dòng màu vàng cho dòng hiển thị sai vị trí .
Nhờ bác NDU coi lại giúp . Rất cám ơn bác .Nếu được thì bác cho xin cái code nha bác !--=0
Tưởng phải gôm lại và cho vào cột đầu trước... Chứ như bạn yêu cầu vậy thì càng dễ
Sửa name cũ thành:
PHP:
=EVALUATE("{"""&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(MID(setup!$A6,FIND("(",setup!$A6)+1,LEN(setup!$A6)),"/",";"),")",""),";",""";""")," ","")&"""}")
Thật ra thuật toán của công thức này cũng gần giống như dùng Split trong VBA vậy thôi
Và bài này dùng VBA vẫn tốt hơn... chẳng qua chợt nghĩ ra cách dùng công thức nên gữi lên chơi
Ẹc... Ẹc...
 

File đính kèm

  • TACH CHUOI DAI(3).xls
    54.5 KB · Đọc: 55
Lần chỉnh sửa cuối:
Khôn biết nói gì hơn là cám ơn bác NDU nhìu nhìu nha !Kết quả như ý luôn .Khi nào bác rảnh rang tình tang thì cho e xin cái code luôn nha bác (cho trọn vẹn nghĩa tình luôn đi mà )--=0.
 
Khôn biết nói gì hơn là cám ơn bác NDU nhìu nhìu nha !Kết quả như ý luôn .Khi nào bác rảnh rang tình tang thì cho e xin cái code luôn nha bác (cho trọn vẹn nghĩa tình luôn đi mà )--=0.
Code thì dễ mà... Quan trong là THUẬT TOÁN
Tôi trình bày nha:
- Từ chuổi của bạn, ta sẽ tách lấy từ sau vị trí của dấu ( đến hết
- Xong, cắt bỏ luôn dấu ) cuối chuổi
- Xong, biến dấu ";" thành khoảng trắng
- Xong, biến dấu "/" thành khoảng trắng luôn
- Xong, dùng Split tách chuổi đã xử lý thành mảng, theo khoảng trắng
- Giờ thì cứ truy xuất vị trí của mảng thôi
Chẳng hạn vầy:
PHP:
Function SepString(Text As String, Pos As Long)
  On Error GoTo NextStp
  Text = Mid(Text, InStr(Text, "(") + 1, Len(Text))
  Text = Replace(Text, ")", "")
  Text = Replace(Text, " ", "")
  Text = Replace(Text, ";", " ")
  Text = Replace(Text, "/", " ")
  SepString = Split(Text, " ")(Pos - 1)
  If SepString = "" Then SepString = 0
  Exit Function
NextStp:
  SepString = ""
End Function
 
Lần chỉnh sửa cuối:
Dựa vào cách làm của anh NDU, em xin phép được điều chỉnh một chút. Xin các anh chị chỉ bảo thêm.
 

File đính kèm

  • TACH CHUOI DAI(3).zip
    11.4 KB · Đọc: 45
Code thì dễ mà... Quan trong là THUẬT TOÁN
Tôi trình bày nha:
- Từ chuổi của bạn, ta sẽ tách lấy từ sau vị trí của dấu ( đến hết
- Xong, cắt bỏ luôn dấu ) cuối chuổi
- Xong, biến dấu ";" thành khoảng trắng
- Xong, biến dấu "/" thành khoảng trắng luôn


- Xong, dùng Split tách chuổi đã xử lý thành mảng, theo khoảng trắng
- Giờ thì cứ truy xuất vị trí của mảng thôi
Chẳng hạn vầy:
PHP:
Function SepString(Text As String, Pos As Long)
  On Error GoTo NextStp
  Text = Mid(Text, InStr(Text, "(") + 1, Len(Text))
  Text = Replace(Text, ")", "")
  Text = Replace(Text, " ", "")
  Text = Replace(Text, ";", " ")
  Text = Replace(Text, "/", " ")
  SepString = Split(Text, " ")(Pos - 1)
  If SepString = "" Then SepString = 0
  Exit Function
NextStp:
  SepString = ""
End Function

Rất cám ơn sự nhiệt tình của bác NDU nhưng thiệt tình là trình độ VB mình còn yếu quá +-+-+-++-+-+-++-+-+-+(chắc phải sếp thời gian học mới được ).Bữa giờ phiền bác cũng nhiều (ngại quá đi --=0).Vậy phiền bác cho e xin file hoàn chỉnh để e nghiên cứu từ từ vậy .
Cám ơn bác NDU nhiều nhiều nha !--=0
 
Rất cám ơn sự nhiệt tình của bác NDU nhưng thiệt tình là trình độ VB mình còn yếu quá +-+-+-++-+-+-++-+-+-+(chắc phải sếp thời gian học mới được ).Bữa giờ phiền bác cũng nhiều (ngại quá đi --=0).Vậy phiền bác cho e xin file hoàn chỉnh để e nghiên cứu từ từ vậy .
Cám ơn bác NDU nhiều nhiều nha !--=0
Thì copy code quăng vào module rồi áp dụng thôi mà bạn
 

File đính kèm

  • TACH CHUOI DAI(3).xls
    47 KB · Đọc: 47
Mình cũng làm thử rồi nhưng có lẽ nội công chưa đủ thâm niên nên chưa nhìn ra và ứng dụng bí kíp này vào file như thế nào .+-+-+-+. Nên đành phiền bác vậy.--=0
Cám ơn bác nhiều nhiều nha. Bài này đến đây là ok lắm lắm rồi.

CÁM ƠN BQT DIỄN ĐÀN GPE , GPE CHO MỌI NGƯỞI HỌC HỎI VÀ GIÚP ĐỠ LẪN NHAU .THẬT ĐÁNG TRÂN TRỌNG.
 
tách một đoạn trong chuổi

yêu cầu của mình cũng giống giậy. nhưng không biết dùng code, cong thức cũng không pro. nên thực hiện qua nhiều bước mới có kết quả. Mong các chiến hữu giúp minh vì data của minh rất lớn, mình up lên 1 đoạn nhé.
 

File đính kèm

  • tach ngay.rar
    2.4 KB · Đọc: 12
yêu cầu của mình cũng giống giậy. nhưng không biết dùng code, cong thức cũng không pro. nên thực hiện qua nhiều bước mới có kết quả. Mong các chiến hữu giúp minh vì data của minh rất lớn, mình up lên 1 đoạn nhé.
Nếu đúng cấu trúc dữ liệu là như thế bạn thử sử dụng 2 cái hàm "xi- ma- chao" này xem sao
Hàm lấy Loại
Mã:
Public Function Loai(ByVal Cll) As String
    Dim Re
        Set Re = CreateObject("VBScript.RegExp")
            With Re
                .Global = True
                .IgnoreCase = False
                .Pattern = "[^A-Za-z]"
                Loai = .Replace(Cll, "")
            End With
    Set Re = Nothing
End Function
Hàm lấy ngày
Mã:
Public Function Ngay(ByVal Cll)
    Dim Re
        Set Re = CreateObject("VBScript.RegExp")
        Cll = Right(Cll, 10)
            With Re
                .Global = True
                .Pattern = "[\D]"
                Ngay = .Replace(Cll, "")
            End With
    Set Re = Nothing
End Function
 

File đính kèm

  • tach ngay.xls
    27 KB · Đọc: 20
yêu cầu của mình cũng giống giậy. nhưng không biết dùng code, cong thức cũng không pro. nên thực hiện qua nhiều bước mới có kết quả. Mong các chiến hữu giúp minh vì data của minh rất lớn, mình up lên 1 đoạn nhé.
Gõ vào D4 công thức:
PHP:
=TRIM(MID(SUBSTITUTE($C4,"/",REPT(" ",LEN($C4))),LEN($C4),LEN($C4)))
Gõ vào E4 công thức:
PHP:
=SUBSTITUTE(SUBSTITUTE(TRIM(RIGHT(SUBSTITUTE($C4,"/",REPT(" ",LEN($C4))),LEN($C4))),"-",""),".","")
 

File đính kèm

  • tach ngay.xls
    15 KB · Đọc: 24
yêu cầu của mình cũng giống giậy. nhưng không biết dùng code, cong thức cũng không pro. nên thực hiện qua nhiều bước mới có kết quả. Mong các chiến hữu giúp minh vì data của minh rất lớn, mình up lên 1 đoạn nhé.

Hoặc bạn tham khảo:
- Tại D4:
PHP:
=MID(C4,FIND("/",C4)+1,FIND("/",C4,FIND("/",C4)+1)-FIND("/",C4)-1)

- Tại E4:
PHP:
=SUBSTITUTE(SUBSTITUTE(RIGHT(C4,LEN(C4)-FIND("/",C4,FIND("/",C4)+1)),".",""),"-","")
 
Thưa các thày 2 dòng
PHP:
NextStp:
  SepString = ""
Trong code của thày Ndu
PHP:
Function SepString(Text As String, Pos As Long)
  On Error GoTo NextStp
  Text = Mid(Text, InStr(Text, "(") + 1, Len(Text))
  Text = Replace(Text, ")", "")
  Text = Replace(Text, " ", "")
  Text = Replace(Text, ";", " ")
  Text = Replace(Text, "/", " ")
  SepString = Split(Text, " ")(Pos - 1)
  If SepString = "" Then SepString = 0
  Exit Function
NextStp:
  SepString = ""
End Function

nói lên cái gì ah?
 
Thưa các thày 2 dòng
PHP:
NextStp:
  SepString = ""
Trong code của thày Ndu
PHP:
Function SepString(Text As String, Pos As Long)
  On Error GoTo NextStp
  Text = Mid(Text, InStr(Text, "(") + 1, Len(Text))
  Text = Replace(Text, ")", "")
  Text = Replace(Text, " ", "")
  Text = Replace(Text, ";", " ")
  Text = Replace(Text, "/", " ")
  SepString = Split(Text, " ")(Pos - 1)
  If SepString = "" Then SepString = 0
  Exit Function
NextStp:
  SepString = ""
End Function

nói lên cái gì ah?
Do có dòng On Error GoTo NextStp ở trên, có nghĩa là: Nếu gặp lỗi thì nhảy đến NextStp
Nhản NextStp ở dưới có đoạn SepString = "" ---> Vậy toàn bộ chúng có nghĩa là Nếu gặp lỗi thì SepString = ""
Vậy thôi!
 
Xin cho hỏi: On Error GoTo NextStp cái này khác gì bẫy lỗi On Error Resume Next?
 
Web KT
Back
Top Bottom