huonglien1901
GPE là ngôi nhà thứ 2 của tôi!!!
- Tham gia
- 17/4/16
- Bài viết
- 2,701
- Được thích
- 2,434
- Giới tính
- Nam
- Nghề nghiệp
- Nhân viên kỹ thuật in ấn
Option Explicit
Sub HL1901PLN()
Dim SArr, Res() As String, Tmp
Dim i, j, k
SArr = Sheet1.Range("A2", Sheet1.Range("A2").End(xlDown))
ReDim Res(1 To UBound(SArr), 1 To 4)
For i = 1 To UBound(SArr)
Tmp = Split(SArr(i, 1))
For j = 2 To UBound(Tmp)
If IsNumeric(Tmp(j)) = True And Len(Tmp(j)) >= 8 Then
k = k + 1
Res(i, k + 1) = Tmp(j)
End If
Next j
For j = UBound(Tmp) To 1 Step -1
If IsNumeric(Tmp(j)) = True And Len(Tmp(j)) = 1 And Len(Tmp(j - 1)) > 1 Then
Res(i, 4) = Tmp(j)
Exit For
End If
Next j
Res(i, 1) = Tmp(0)
k = 0
Next i
Sheet1.Range("B2", Sheet1.Range("E" & UBound(SArr) + 1)).ClearContents
Sheet1.Range("B2", Sheet1.Range("E" & UBound(SArr) + 1)) = Res
End Sub
Bạn chạy code này xem sao, thấy kết quả có vẻ giống trong file bạn đính kèm
Mã:Option Explicit Sub HL1901PLN() Dim SArr, Res() As String, Tmp Dim i, j, k SArr = Sheet1.Range("A2", Sheet1.Range("A2").End(xlDown)) ReDim Res(1 To UBound(SArr), 1 To 4) For i = 1 To UBound(SArr) Tmp = Split(SArr(i, 1)) For j = 2 To UBound(Tmp) If IsNumeric(Tmp(j)) = True And Len(Tmp(j)) >= 8 Then k = k + 1 Res(i, k + 1) = Tmp(j) End If Next j For j = UBound(Tmp) To 1 Step -1 If IsNumeric(Tmp(j)) = True And Len(Tmp(j)) = 1 And Len(Tmp(j - 1)) > 1 Then Res(i, 4) = Tmp(j) Exit For End If Next j Res(i, 1) = Tmp(0) k = 0 Next i Sheet1.Range("B2", Sheet1.Range("E" & UBound(SArr) + 1)).ClearContents Sheet1.Range("B2", Sheet1.Range("E" & UBound(SArr) + 1)) = Res End Sub
Thêm dòng này trước End Sub là được bạn.dạ code ra đúng rồi anh ơi. Anh ơi chọn cột B format là text luôn anh ơi
Em cảm ơn Anh.
Sheet1.Range("B2", Sheet1.Range("B1000000").End(xlUp)).NumberFormat = "@"
Thêm dòng này trước End Sub là được bạn.
Mã:Sheet1.Range("B2", Sheet1.Range("B1000000").End(xlUp)).NumberFormat = "@"
Dạ em cảm ơn Anh, Để em test thử xem có xảy ra lỗi gì không, rồi em báo lại cho anh!
Một lần nữa em cảm ơn anh rất nhiều!
Nhưng bạn cần nếu kết quả mong muốn của bạn trong những trường hợp đó đi chứ.
Bạn chạy code này xem sao, thấy kết quả có vẻ giống trong file bạn đính kèm
Mã:Option Explicit Sub HL1901PLN() Dim SArr, Res() As String, Tmp Dim i, j, k SArr = Sheet1.Range("A2", Sheet1.Range("A2").End(xlDown)) ReDim Res(1 To UBound(SArr), 1 To 4) For i = 1 To UBound(SArr) Tmp = Split(SArr(i, 1)) For j = 2 To UBound(Tmp) If IsNumeric(Tmp(j)) = True And Len(Tmp(j)) >= 8 Then k = k + 1 Res(i, k + 1) = Tmp(j) End If Next j For j = UBound(Tmp) To 1 Step -1 If IsNumeric(Tmp(j)) = True And Len(Tmp(j)) = 1 And Len(Tmp(j - 1)) > 1 Then Res(i, 4) = Tmp(j) Exit For End If Next j Res(i, 1) = Tmp(0) k = 0 Next i Sheet1.Range("B2", Sheet1.Range("E" & UBound(SArr) + 1)).ClearContents Sheet1.Range("B2", Sheet1.Range("E" & UBound(SArr) + 1)) = Res End Sub
Bạn chạy thử Sub này xem sao.Em gửi lại file anh xem giúp em, em có nêu kết quả mong muốn trong đó
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, N As Long, R As Long, Tmp
sArr = Range("A2", Range("A2").End(xlDown)).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 4)
For I = 1 To R
Tmp = Split(sArr(I, 1), " "): N = UBound(Tmp)
dArr(I, 1) = Tmp(0): dArr(I, 2) = "'" & Tmp(2)
dArr(I, 3) = "'" & Tmp(N - 2): dArr(I, 4) = Tmp(N - 1)
Next I
Range("B2:D2").Resize(R) = dArr
End Sub
Bạn chạy thử Sub này xem sao.
PHP:Public Sub GPE() Dim sArr(), dArr(), I As Long, J As Long, N As Long, R As Long, Tmp sArr = Range("A2", Range("A2").End(xlDown)).Value R = UBound(sArr) ReDim dArr(1 To R, 1 To 4) For I = 1 To R Tmp = Split(sArr(I, 1), " "): N = UBound(Tmp) dArr(I, 1) = Tmp(0): dArr(I, 2) = "'" & Tmp(2) dArr(I, 3) = "'" & Tmp(N - 2): dArr(I, 4) = Tmp(N - 1) Next I Range("B2:D2").Resize(R) = dArr End Sub
Tất cả trường hợp là sao? Kết quả tham khảo là chỗ nào?Em gửi file Anh BATE, anh xem giúp em với! Em có nêu tất cả các trường hợp!
Em cảm ơn Anh!
dạ em gửi nhầm file cho anh, em gửi lại file cho anh xem, em có nêu tất cả trường hợp xảy ra, em có nêu kết quả tham khảo đó anh!Tất cả trường hợp là sao? Kết quả tham khảo là chỗ nào?
60 dòng cùng 1 kiểu dữ liệu, tách chuỗi ra từng nhóm, lấy nhóm đầu tiên, nhóm thứ ba, nhóm thứ tư, nhóm kế "bét".
Vậy thì xét theo kiểu "lòng vòng".dạ em gửi nhầm file cho anh, em gửi lại file cho anh xem, em có nêu tất cả trường hợp xảy ra, em có nêu kết quả tham khảo đó anh!
Sub GPE()
Dim sArr, dArr(), I As Long, J As Long, N As Long, R As Long, Tmp
sArr = Range("A2", Range("A2").End(xlDown)).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 4)
For I = 1 To UBound(sArr)
Tmp = Split(sArr(I, 1)): N = UBound(Tmp)
dArr(I, 1) = Tmp(0): dArr(I, 2) = Tmp(2)
For J = 3 To UBound(Tmp)
If IsNumeric(Tmp(J)) Then
N = J + 1: dArr(I, 3) = Tmp(J)
Exit For
End If
Next J
For J = UBound(Tmp) To N Step -1
If IsNumeric(Tmp(J)) And (Not IsNumeric(Tmp(J - 1)) Or J = N) Then
dArr(I, 4) = Tmp(J): Exit For
End If
Next J
Next I
Range("B2:E2").Resize(R) = dArr
End Sub
Format cột B,C,D là Text trước khi chạy code.Vậy thì xét theo kiểu "lòng vòng".
PHP:Sub GPE() Dim sArr, dArr(), I As Long, J As Long, N As Long, R As Long, Tmp sArr = Range("A2", Range("A2").End(xlDown)).Value R = UBound(sArr) ReDim dArr(1 To R, 1 To 4) For I = 1 To UBound(sArr) Tmp = Split(sArr(I, 1)): N = UBound(Tmp) dArr(I, 1) = Tmp(0): dArr(I, 2) = Tmp(2) For J = 3 To UBound(Tmp) If IsNumeric(Tmp(J)) Then N = J + 1: dArr(I, 3) = Tmp(J) Exit For End If Next J For J = UBound(Tmp) To N Step -1 If IsNumeric(Tmp(J)) And (Not IsNumeric(Tmp(J - 1)) Or J = N) Then dArr(I, 4) = Tmp(J): Exit For End If Next J Next I Range("B2:E2").Resize(R) = dArr End Sub
Format cột B,C,D là Text trước khi chạy code.
Quái luôn! Dữ liệu từ dòng 82 trở xuống đâu có giống "dạng" bên trên, và kết quả bạn muốn có là gì?