Lọc dữ liệu có nguyên tắc để tạo thành các ô dữ liệu mới (1 người xem)

Liên hệ QC

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

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

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

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

Back
Top Bottom