Tách dãy số dài bất kỳ sau dấu ";" vào vùng cột x dòng mặc định ? (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

nqdn2010

Optimal Сasual Dating - Actual Girls
Tham gia
22/2/12
Bài viết
267
Được thích
15
Giới tính
Nam
Nghề nghiệp
Health
- Nhờ các Thầy viết code hộ tôi giải quyết vấn đề kèm theo trong tập tin !!!
- Tôi Search cả đêm rất nhiều đề tài tách chuỗi, nhưng không đáp ứng được yêu cầu! +-+-+-++-+-+-++-+-+-+
 

File đính kèm

- Lại Search cả buổi nhưng vẫn chưa tim thấy đề tài để vận dụng! Mong trợ giúp rất nhiều ở GPE!
 
Upvote 0
- Nhờ các Thầy viết code hộ tôi giải quyết vấn đề kèm theo trong tập tin !!!
- Tôi Search cả đêm rất nhiều đề tài tách chuỗi, nhưng không đáp ứng được yêu cầu! +-+-+-++-+-+-++-+-+-+

Mã:
Function TChu(chuoi As String) As Variant
Dim tmp, KQ(), i As Long, j As Byte, k As Long
If chuoi = vbNullString Then Exit Function
chuoi = Replace(chuoi, " ", "")
If Left(chuoi, 1) = ";" Then chuoi = Right(chuoi, Len(chuoi) - 1)
If Right(chuoi, 1) = ";" Then chuoi = Left(chuoi, Len(chuoi) - 1)
tmp = Split(chuoi, ";")
ReDim KQ(1 To Application.RoundUp((UBound(tmp) + 1) / 10, 0), 1 To 10)
On Error Resume Next
For i = 1 To UBound(KQ, 1)
    For j = 1 To UBound(KQ, 2)
        KQ(i, j) = tmp(k)
        k = k + 1
    Next j
Next i
TChu = KQ
End Function
'--------------------
Sub nqdn()
Dim T As String
T = Sheet1.Range("A1").Value
Sheet1.Range("B5").Resize(UBound(TChu(T), 1), UBound(TChu(T), 2)).Value = TChu(T)
End Sub
 
Upvote 0
Cám ơn bạn, Để minh test thử!
 
Upvote 0
Như mong đợi! Cám ơn bạn rất nhiều!
Chúc ngày cuối tuần hạnh phúc!
 
Upvote 0
Như mong đợi! Cám ơn bạn rất nhiều!
Chúc ngày cuối tuần hạnh phúc!
Góp vui thêm một code:
Mã:
Function Rut(s As String, so As Long) As String  
With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = "(;?)(\d+)(;?)"
    On Error Resume Next
    Rut = .Execute(s)(so - 1).SubMatches(1)
    On Error GoTo 0
  End With
End Function
Như trong bảng bạn gửi tại vị trí cột B5 đặt công thức: [B5] =rut($A$1;COLUMNS($B5:B5)+10*(ROW(B5)-ROW($B$5))) kéo dọc kéo ngang sẽ ra. Có thể thay ";" bằng "," tùy máy.
 
Lần chỉnh sửa cuối:
Upvote 0
- Tôi Search cả đêm rất nhiều đề tài tách chuỗi, nhưng không đáp ứng được yêu cầu! +-+-+-++-+-+-++-+-+-+

Bài này cũng có thể sử dụng CT được:

- Nếu lấy và sắp xếp theo thứ tự ưu tiên từ trái qua phải trước rồi mới từ trên xuống dưới thì bạn dùng CT này:
[B5]

Mã:
=TRIM(MID(SUBSTITUTE($A$1,";",REPT(" ",50)),(B$4-1)*50+(ROW(1:1)-1)*500+SUMPRODUCT(LEN($B$4:$K4)*1)-$K$4,50))

- Còn nếu lấy và sắp xếp theo thứ tự ưu tiên từ trên xuống dưới trước rồi mới từ trái qua phải thì bạn dùng CT này:
[B5]

Mã:
=IF($A6<=ROUNDUP((LEN($A$1)-LEN(SUBSTITUTE($A$1,";",""))+1)/10,),TRIM(MID(SUBSTITUTE($A$1,";",REPT(" ",50)),MAX((A$4*ROUNDUP((LEN($A$1)-LEN(SUBSTITUTE($A$1,";",""))+1)/10,)+$A5)*50+SUMPRODUCT(LEN(OFFSET($A$5,,,ROUNDUP((LEN($A$1)-LEN(SUBSTITUTE($A$1,";",""))+1)/10,),B$4))*1)-SUMPRODUCT(LEN(OFFSET($A$5,,,ROUNDUP((LEN($A$1)-LEN(SUBSTITUTE($A$1,";",""))+1)/10,),))*1)+SUMPRODUCT(LEN(OFFSET(B$4,,,$A6,1))*1)-LEN(B$4),1),50)),"")

Cả 2 CT đều là CT mảng nên chạy khá ì ạch ....
 
Upvote 0
Bạn thử dùng công thức sau cho B5 xem, công thức thường không phải công thức mảng
Mã:
=TRIM(MID(SUBSTITUTE(";"&$A$1,";",REPT(" ",100)),(COLUMN(A1)+ROW(A1)*10-10)*100,100))
 
Upvote 0
dùng công thức khác cho ô B5, copy cho các ô còn lại
Mã:
=TRIM(MID(SUBSTITUTE(SUBSTITUTE(";"&$A$1,";",REPT(" ",LEN($A$1)+2),B$4+$A5*10),";",REPT(" ",LEN($A$1)+2),B$4+$A5*10),LEN($A$1)+2,LEN($A$1)+2))
 
Upvote 0
Bài này có nhiều cách, cho bạn thêm vài cách nữa:
Mã:
B5=LOOKUP(10^5,--MID($A$1,FIND("X",SUBSTITUTE(";"&$A$1,";","X",B$4+$A5*10)),ROW($1:$5)))
Copy cho các ô còn lại!!!
Hoặc CT mảng:
Mã:
B5=SMALL(IF(ISNUMBER(FIND(";"&ROW($1:$2000)&";",";"&$A$1&";")),ROW($1:$2000)),B$4+$A5*10)
Ctrl+Shift+Enter rồi copy cho các ô còn lại!!!
P/s: CT bài #8 một số ô không ra được do cắt ngắn quá, nếu cắt dài quá thì những chuỗi dài quá sẽ bị lỗi!!!
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
'--------------------
Sub nqdn()
Dim T As String
T = Sheet1.Range("A1").Value
Sheet1.Range("B5").Resize(UBound([COLOR=#ff0000]TChu(T)[/COLOR], 1), UBound([COLOR=#ff0000]TChu(T)[/COLOR], 2)).Value = [COLOR=#ff0000]TChu(T)[/COLOR]
End Sub

Code này gọi hàm TChu 3 lần, với cùng một tham số T
 
Upvote 0
Hàm TChu của bạn có một đoạn trả về trống trơn, nếu khong có dữ liệu.
Các code gọi nó cần truy xét trường hợp này trước khi chép dữ liệu.
Ví dụ:
Dim tm as variant
tmp = TChu(T)
If TypeName(tm) = "Null" Then
 
Upvote 0
Hàm TChu của bạn có một đoạn trả về trống trơn, nếu khong có dữ liệu.
Các code gọi nó cần truy xét trường hợp này trước khi chép dữ liệu.
Ví dụ:
Dim tm as variant
tmp = TChu(T)
If TypeName(tm) = "Null" Then

Em cảm ơn anh.

(p/s: Không có nút "Cảm ơn" thấy hơi bất tiện)
 
Upvote 0
Hàm TChu của bạn có một đoạn trả về trống trơn, nếu khong có dữ liệu.
Các code gọi nó cần truy xét trường hợp này trước khi chép dữ liệu.
Ví dụ:
Dim tm as variant
tmp = TChu(T)
If TypeName(tm) = "Null" Then

anh ơi cho em hỏi , với dạng bài này ta nên dùng hàm split hay nên réc géc để cho thấy sự mạnh mẽ ? --=0--=0
 
Upvote 0
anh ơi cho em hỏi , với dạng bài này ta nên dùng hàm split hay nên réc géc để cho thấy sự mạnh mẽ ? --=0--=0

Cái gì mạnh? Nếu để hù thiên hạ thì cách nào càng khó hiểu càng mạnh. Nếu để giải quyết vấn đề thì cái nào càng dễ hiểu càng mạnh.

Rách ách nó là một cổ máy từ thời ngôn ngữ LISP, chuyên dùng để phân tích chuỗi. Tuy nó rất uyển chuyển và sung sức nhưng cũng có vài khuyết điểm. Thứ nhất là dựng lên nó đã nặng. Thứ hai là nó được mặc định ở trạng thái làm việc rất tham lam, khoái làm tới tấp (tiếng Việt gọi là xí xọn).
Để xứng đáng với gọi nó ra (vấn đề 1), công việc bạn phải nặng 1 chút. Để tránh chuyện nó làm việc quá trớn (vấn đề 2), bạn phải biết cách giới hạn nó - cũng như cỡi ngựa chứng phải biết cầm cương, khong khéo nó hất cho gãy cổ.

Si pơ lít là hàm chuyên chẻ chuỗi. Công việc của nó đơn giản chỉ là chẻ chuỗi thành mảng, dựa vào một ký tự làm hiệu. Hết.

Bài này chỉ đơn giản chính xác công việc thứ hai. Không cần phải giải thích gì thêm.

Nếu điều kiện phức tạp hơn, điển hình nếu chẻ chuỗi theo nhiều ký tự [;:,!|] chẳng hạn, thì có lẽ rách ách bắt đầu đạt ưu thế.

Chú: hình như tôi chưa hề nhìn nhận mình là đờn ông hay đờn bà, sao gọi toi là anh nhỉ? ++--//*
 
Upvote 0
Chú: hình như tôi chưa hề nhìn nhận mình là đờn ông hay đờn bà, sao gọi toi là anh nhỉ?
(1) Em dựa vào ngữ điệu trong câu văn (nhận định cá nhân);
(2) Vì chưa biết chính xác nên gọi theo (1). Nếu có phản hồi không đúng thì em sửa, chưa có phản hồi thì gọi tiếp theo (1).
 
Upvote 0
(1) Em dựa vào ngữ điệu trong câu văn (nhận định cá nhân);
(2) Vì chưa biết chính xác nên gọi theo (1). Nếu có phản hồi không đúng thì em sửa, chưa có phản hồi thì gọi tiếp theo (1).

Đùa chơi với bạn kia thôi. Bạn ấy thích đùa dai. Gọi tôi là anh hay chị gì cũng được. :pg_blossm: :prop:
Theo cá nhân mà nói thì tôi chỉ kỵ với mấy từ như bro (chưa thấy ai dùng sis nhỉ?), pro, đại ca, huynh, sư phụ,... Lý do giản dị là tôi cần dạy con cách ăn nói cho nên không thể giao thiệp với những người ăn nói như thế.
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom