Lọc dữ liệu có nguyên tắc để tạo thành các ô dữ liệu mới

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

pham ha 94

Thành viên chính thức
Tham gia
13/12/22
Bài viết
86
Được thích
6
Như tiêu đề, mình muốn nhờ các bác giúp, khi dữ liệu tại cột C có dữ liệu nhiều hơn 4 ký tự thì sẽ tạo ra dòng mới để đưa mã khóa xuống dòng mới.
Ví dụ 2301, 2302 thì sẽ tạo thành 2 dòng tại cột C có nội dung là 2301 và dòng 2302
 

File đính kèm

  • File format dong.xlsx
    9.1 KB · Đọc: 20
Như tiêu đề, mình muốn nhờ các bác giúp, khi dữ liệu tại cột C có dữ liệu nhiều hơn 4 ký tự thì sẽ tạo ra dòng mới để đưa mã khóa xuống dòng mới.
Ví dụ 2301, 2302 thì sẽ tạo thành 2 dòng tại cột C có nội dung là 2301 và dòng 2302
Bạn chạy thử code sau và kiểm tra lại kết quả nha
Mã:
Option Explicit
Sub GPE()
    Dim i%, k%, j%, Arr(), b%, dc%
    Dim a%, Res(1 To 1000, 1 To 4)
    Arr = Range("A2:D6").Value
    For i = 1 To UBound(Arr)
        Arr(i, 3) = Replace(Arr(i, 3), ".", "|")
        Arr(i, 3) = Replace(Arr(i, 3), ",", "|")
    Next i
    For i = 1 To UBound(Arr)
        If IsNumeric(Arr(i, 3)) Then
            k = k + 1
            For j = 1 To 4
                 Res(k, j) = Arr(i, j)
            Next j
        Else
            For a = 1 To Len(Arr(i, 3))
                If Mid(Arr(i, 3), a, 1) = "|" Then dc = dc + 1
            Next a
            If dc > 0 Then
                For b = 0 To dc
                    k = k + 1
                    For j = 1 To 2
                        Res(k, j) = Arr(i, j)
                    Next j
                    Res(k, 3) = Split(Arr(i, 3), "|")(b)
                    Res(k, 4) = Arr(i, 4)
                Next b
            End If
            dc = 0
        End If
    Next i
    If k Then
        Range("G2:J1000").ClearContents
        Range("G2").Resize(k, 4).Value = Res
    End If
    MsgBox "Xong roi"
End Sub
 
Như tiêu đề, mình muốn nhờ các bác giúp, khi dữ liệu tại cột C có dữ liệu nhiều hơn 4 ký tự thì sẽ tạo ra dòng mới để đưa mã khóa xuống dòng mới.
Ví dụ 2301, 2302 thì sẽ tạo thành 2 dòng tại cột C có nội dung là 2301 và dòng 2302
Mã khóa luôn có 4 ký tự
Mã:
Sub ABC()
  Dim arr(), res(), srRes&, i&, k&, j&, L&
 
  arr = Range("A2", Range("D2").End(xlDown)).Value
  For i = 1 To UBound(arr)
    arr(i, 3) = Replace(arr(i, 3), " ", "")
    srRes = srRes + Int(Len(arr(i, 3)) + 1 / 4)
  Next i
  ReDim res(1 To srRes, 1 To 4)
  For i = 1 To UBound(arr)
    L = Len(arr(i, 3))
    For j = 1 To L Step 5
      k = k + 1
      res(k, 1) = arr(i, 1): res(k, 2) = arr(i, 2)
      res(k, 3) = Mid(arr(i, 3), j, 4)
      res(k, 4) = arr(i, 4)
    Next j
  Next i
  i = Range("G1000000").End(xlUp).Row
  If i > 1 Then Range("G2:J" & i).ClearContents
  Range("G2").Resize(k, 4).Value = res
End Sub
 
cảm ơn bác nhiều, EM làm được rồi
Bài đã được tự động gộp:

Bạn chạy thử code sau và kiểm tra lại kết quả nha
Mã:
Option Explicit
Sub GPE()
    Dim i%, k%, j%, Arr(), b%, dc%
    Dim a%, Res(1 To 1000, 1 To 4)
    Arr = Range("A2:D6").Value
    For i = 1 To UBound(Arr)
        Arr(i, 3) = Replace(Arr(i, 3), ".", "|")
        Arr(i, 3) = Replace(Arr(i, 3), ",", "|")
    Next i
    For i = 1 To UBound(Arr)
        If IsNumeric(Arr(i, 3)) Then
            k = k + 1
            For j = 1 To 4
                 Res(k, j) = Arr(i, j)
            Next j
        Else
            For a = 1 To Len(Arr(i, 3))
                If Mid(Arr(i, 3), a, 1) = "|" Then dc = dc + 1
            Next a
            If dc > 0 Then
                For b = 0 To dc
                    k = k + 1
                    For j = 1 To 2
                        Res(k, j) = Arr(i, j)
                    Next j
                    Res(k, 3) = Split(Arr(i, 3), "|")(b)
                    Res(k, 4) = Arr(i, 4)
                Next b
            End If
            dc = 0
        End If
    Next i
    If k Then
        Range("G2:J1000").ClearContents
        Range("G2").Resize(k, 4).Value = Res
    End If
    MsgBox "Xong roi"
End Sub
Cảm ơn bác nhiều, cách này khá hay, đúng luôn với mong muốn ạ
 
Web KT
Back
Top Bottom