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
Bạn tham khảo bài viết sau: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à ramì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 .
Mấy chiêu này tôi học từ anh NDU và múa lạ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 !![]()
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
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ễ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 !![]()
=EVALUATE("{"""&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(MID(setup!$A6,FIND("(",setup!$A6)+1,LEN(setup!$A6)),"/",";"),")",""),";",""";""")," ","")&"""}")
Code thì dễ mà... Quan trong là THUẬT TOÁNKhô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à ).
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
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
Thì copy code quăng vào module rồi áp dụng thôi mà bạnRấ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
).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 !![]()
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 saoyê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é.
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
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
Gõ vào D4 công thức: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é.
=TRIM(MID(SUBSTITUTE($C4,"/",REPT(" ",LEN($C4))),LEN($C4),LEN($C4)))
=SUBSTITUTE(SUBSTITUTE(TRIM(RIGHT(SUBSTITUTE($C4,"/",REPT(" ",LEN($C4))),LEN($C4))),"-",""),".","")
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é.
=MID(C4,FIND("/",C4)+1,FIND("/",C4,FIND("/",C4)+1)-FIND("/",C4)-1)
=SUBSTITUTE(SUBSTITUTE(RIGHT(C4,LEN(C4)-FIND("/",C4,FIND("/",C4)+1)),".",""),"-","")
NextStp:
SepString = ""
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
Do có dòng On Error GoTo NextStp ở trên, có nghĩa là: Nếu gặp lỗi thì nhảy đến NextStpThưa các thày 2 dòng
Trong code của thày NduPHP:NextStp: SepString = ""
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?