VCSC[30] lấy đầu và cuối nên có biến C xác định cột kết quả, còn lại chỉ lấy 1 nên nhập trực tiếp thứ tự cộtCám ơn bác @HieuCD rất nhiều.
Em vẫn có một thắc mắc là, giá trị VCSC[30] thay đổi vị trí, số lượng thì đoạn mã nào bác làm công việc này. Bin xem nhiều lần vẫn còn có thắc mắc này.
Và Bin có thêm thử một giá trị nữa VCSC[26] vào cột 11 và có viết lại code nhưng chạy không được, bác xem hộ Bin chỗ nào bị sai giúp với.
View attachment 273338
=========================================================
Sub ABC2()
Dim sArr(), res$(), vc27$, vc30$, vc26$, vc$, sRow&, tmp$, N&, i&, j&, c&
vc27 = "VCSC[27]": vc30 = "VCSC[30]": vc26 = "VCSC[26]"
With Sheets("Sheet1")
sArr = .Range("A3", .Range("A" & Rows.Count).End(xlUp)).Value
End With
sRow = UBound(sArr)
ReDim res(1 To sRow, 1 To 14)
For i = 1 To sRow
tmp = sArr(i, 1)
N = Len(tmp)
c = 5
c = 11
For j = 1 To N Step 36
vc = Mid(tmp, j, 8)
If Mid(tmp, j, 8) = vc27 Then
res(i, 1) = vc
res(i, 2) = Mid(tmp, j + 9, 5)
res(i, 3) = Mid(tmp, j + 15, 5)
res(i, 4) = Mid(tmp, j + 30, 4)
ElseIf Mid(tmp, j, 8) = vc30 Then
res(i, c) = vc30
res(i, c + 1) = Mid(tmp, j + 9, 5)
res(i, c + 2) = Mid(tmp, j + 15, 5)
If c = 5 Then c = 8
If Mid(tmp, j, 8) = vc26 Then
res(i, c) = vc
res(i, 2) = Mid(tmp, j + 9, 5)
res(i, 3) = Mid(tmp, j + 15, 5)
res(i, 4) = Mid(tmp, j + 30, 4)
If c = 11 Then
End If
Next j
Next i
Sheets("Sheet1").Range("C3").Resize(sRow, 14) = res
End Sub
=========================================================
Mã:
Sub ABC2()
Dim sArr(), res$(), vc27$, vc30$, vc26$, vc$, sRow&, tmp$, N&, i&, j&, c&
vc27 = "VCSC[27]": vc30 = "VCSC[30]": vc26 = "VCSC[26]"
With Sheet1
sArr = .Range("A3", .Range("A" & Rows.Count).End(xlUp)).Value
End With
sRow = UBound(sArr)
ReDim res(1 To sRow, 1 To 14)
For i = 1 To sRow
tmp = sArr(i, 1)
N = Len(tmp)
c = 5
For j = 1 To N Step 36
vc = Mid(tmp, j, 8)
If Mid(tmp, j, 8) = vc27 Then
res(i, 1) = vc
res(i, 2) = Mid(tmp, j + 9, 5)
res(i, 3) = Mid(tmp, j + 15, 5)
res(i, 4) = Mid(tmp, j + 30, 4)
ElseIf Mid(tmp, j, 8) = vc30 Then
res(i, c) = vc30
res(i, c + 1) = Mid(tmp, j + 9, 5)
res(i, c + 2) = Mid(tmp, j + 15, 5)
If c = 5 Then c = 8
ElseIf Mid(tmp, j, 8) = vc26 Then
res(i, 11) = vc
res(i, 12) = Mid(tmp, j + 9, 5)
res(i, 13) = Mid(tmp, j + 15, 5)
res(i, 14) = Mid(tmp, j + 30, 4)
End If
Next j
Next i
Sheet1.Range("C3").Resize(sRow, 14) = res
End Sub