SẮP XẾP LẠI DỮ LIỆU (3 người xem)

  • Thread starter Thread starter LOIKS
  • Ngày gửi Ngày gửi
Liên hệ QC

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

LOIKS

Thành viên chính thức
Tham gia
10/8/18
Bài viết
97
Được thích
7
chào mọi người, mình có vấn đề sau nhở mọi người giúp,mọi người có thể xem file đính kèm
mình có dữ liệu tai sheet" PHAN TICH"bây giờ là sắp xếp lại dữ liệu ứng với từng cấu kiện tại cột "B", dữ liệu đuoc sắp xếp thành 2 phần " bên trên" và" bên dưới|"
cột bên trên và bên dưới sắp xếp dựa vào dữ liệu tại cột "C" nếu 3 kí tự cuối cùng tại cột "C"= "MAX" thì dữ liệu sắp xếp vào phần bên dưới,
nếu 3 kí tự cuối cùng tại cột "C"= "Min" thì dữ liệu sắp xếp vào phần bên trên,
vấn đề là cột "B" số cấu kiện sẽ xuất hiện có 3 trường hợp
th1 :là 6 cấu kiện,
th2: là 5 cấu kiện,
th3:i là 4 cấu kiện
kết quả mọi người có thể xem tại sheet" SAU KHI SĂP XÉP"
cảm ơn mọi người nhiều
 

File đính kèm

chào mọi người, mình có vấn đề sau nhở mọi người giúp,mọi người có thể xem file đính kèm
mình có dữ liệu tai sheet" PHAN TICH"bây giờ là sắp xếp lại dữ liệu ứng với từng cấu kiện tại cột "B", dữ liệu đuoc sắp xếp thành 2 phần " bên trên" và" bên dưới|"
cột bên trên và bên dưới sắp xếp dựa vào dữ liệu tại cột "C" nếu 3 kí tự cuối cùng tại cột "C"= "MAX" thì dữ liệu sắp xếp vào phần bên dưới,
nếu 3 kí tự cuối cùng tại cột "C"= "Min" thì dữ liệu sắp xếp vào phần bên trên,
vấn đề là cột "B" số cấu kiện sẽ xuất hiện có 3 trường hợp
th1 :là 6 cấu kiện,
th2: là 5 cấu kiện,
th3:i là 4 cấu kiện
kết quả mọi người có thể xem tại sheet" SAU KHI SĂP XÉP"
cảm ơn mọi người nhiều
Tham khảo giải pháp bằng công thức:
Mã:
G3=IFERROR(OFFSET(D$2,AGGREGATE(15,6,ROW($1:$100)/($B$3:$B$100=$B3)/(RIGHT($C$3:$C$100,3)="max"),COUNTIF($B$3:$B3,$B3)),),"")
Enter, fill qua phải rồi fill cả hàng xuống. Copy G3, dán qua R3, cũng fill qua phải rồi fill cả hàng xuống.

Thân.
 

File đính kèm

Tham khảo giải pháp bằng công thức:
Mã:
G3=IFERROR(OFFSET(D$2,AGGREGATE(15,6,ROW($1:$100)/($B$3:$B$100=$B3)/(RIGHT($C$3:$C$100,3)="max"),COUNTIF($B$3:$B3,$B3)),),"")
Enter, fill qua phải rồi fill cả hàng xuống. Copy G3, dán qua R3, cũng fill qua phải rồi fill cả hàng xuống.

Thân.
Hình như giá trị "Station" ở cột D giống nhau phải nằm cùng hàng :p
Chúc bạn 1 ngày vui :):):)
 
Hình như giá trị "Station" ở cột D giống nhau phải nằm cùng hàng :p
Chúc bạn 1 ngày vui :):):)
UHM. ĐÚNG RỒI BẠN, TRƯỜNG HỢP Ở CỘT B SỐ CẤU KIỆN XUẤT HIỆN 6 LẦN HAY 4 LẦN THÌ CỦNG OK
Chỉ có trường hợp xuất hiện 5 lần là hơi khó thôi
Bài đã được tự động gộp:

Tham khảo giải pháp bằng công thức:
Mã:
G3=IFERROR(OFFSET(D$2,AGGREGATE(15,6,ROW($1:$100)/($B$3:$B$100=$B3)/(RIGHT($C$3:$C$100,3)="max"),COUNTIF($B$3:$B3,$B3)),),"")
Enter, fill qua phải rồi fill cả hàng xuống. Copy G3, dán qua R3, cũng fill qua phải rồi fill cả hàng xuống.

Thân.
CẢM ƠN BẠN NHÉ, CHO MÌNH HỎI CHÚT
NẾU ĐƯA MẤY CÔNG THỨC TRÊN VÀO "VBA" thì có ổn khôgn bạn
 
chào mọi người, mình có vấn đề sau nhở mọi người giúp,mọi người có thể xem file đính kèm
mình có dữ liệu tai sheet" PHAN TICH"bây giờ là sắp xếp lại dữ liệu ứng với từng cấu kiện tại cột "B", dữ liệu đuoc sắp xếp thành 2 phần " bên trên" và" bên dưới|"
cột bên trên và bên dưới sắp xếp dựa vào dữ liệu tại cột "C" nếu 3 kí tự cuối cùng tại cột "C"= "MAX" thì dữ liệu sắp xếp vào phần bên dưới,
nếu 3 kí tự cuối cùng tại cột "C"= "Min" thì dữ liệu sắp xếp vào phần bên trên,
vấn đề là cột "B" số cấu kiện sẽ xuất hiện có 3 trường hợp
th1 :là 6 cấu kiện,
th2: là 5 cấu kiện,
th3:i là 4 cấu kiện
kết quả mọi người có thể xem tại sheet" SAU KHI SĂP XÉP"
cảm ơn mọi người nhiều
Chạy thử đoạn code này xem sao.
Kt quả điền vào sheet "PHANTICH"
Mã:
Sub a_sort_noiluc()
Dim SArr As Variant
Dim Res1 As Variant
Dim Res2 As Variant
Dim i As Long, j As Long, x, z
SArr = Sheet8.Range("a2:f23")
ReDim Res1(1 To UBound(SArr), 1 To 3)
ReDim Res2(1 To UBound(SArr), 1 To 3)
z = 2
Do While z < UBound(SArr)
    For i = z + 1 To UBound(SArr)
        If SArr(i, 2) <> SArr(z, 2) Then Exit For
    Next i
    x = i - z
    If x = 6 Then
        For i = z To z + 2
            For j = 1 To 3
                Res1(i - 1, j) = SArr(i, j + 3)
                Res2(i - 1, j) = SArr(i + 3, j + 3)
            Next j
        Next i
    End If
    If x = 5 Then
        For i = z To z + 2
            For j = 1 To 3
                Res1(i - 1, j) = SArr(i, j + 3)
            Next j
        Next i
        i = z
        For j = 1 To 3
            Res2(i, j) = SArr(i + 3, j + 3)
        Next j
        i = z + 2
        For j = 1 To 3
            Res2(i, j) = SArr(i + 2, j + 3)
        Next j
    End If
    If x = 4 Then
        For i = z To z + 1
            For j = 1 To 3
                Res1(i - 1, j) = SArr(i, j + 3)
                Res2(i - 1, j) = SArr(i + 2, j + 3)
            Next j
        Next i
    End If
    z = x + z
Loop
With Sheet8
.Range("g3").Resize(UBound(Res1), UBound(Res1, 2)).ClearContents
.Range("g3").Resize(UBound(Res1), UBound(Res1, 2)) = Res1
.Range("r3").Resize(UBound(Res2), UBound(Res2, 2)).ClearContents
.Range("r3").Resize(UBound(Res2), UBound(Res2, 2)) = Res2
End With
End Sub
 
chào mọi người, mình có vấn đề sau nhở mọi người giúp,mọi người có thể xem file đính kèm
mình có dữ liệu tai sheet" PHAN TICH"bây giờ là sắp xếp lại dữ liệu ứng với từng cấu kiện tại cột "B", dữ liệu đuoc sắp xếp thành 2 phần " bên trên" và" bên dưới|"
cột bên trên và bên dưới sắp xếp dựa vào dữ liệu tại cột "C" nếu 3 kí tự cuối cùng tại cột "C"= "MAX" thì dữ liệu sắp xếp vào phần bên dưới,
nếu 3 kí tự cuối cùng tại cột "C"= "Min" thì dữ liệu sắp xếp vào phần bên trên,
vấn đề là cột "B" số cấu kiện sẽ xuất hiện có 3 trường hợp
th1 :là 6 cấu kiện,
th2: là 5 cấu kiện,
th3:i là 4 cấu kiện
kết quả mọi người có thể xem tại sheet" SAU KHI SĂP XÉP"
cảm ơn mọi người nhiều
Qui ước:
_ Dữ liệu xếp max trước Min sau
_ Chặn trên và dưới của 2 kết quả cùng dòng
Mã:
Sub XepDuLieu()
  Dim sArr(), Res1(), Res2()
  Dim fRow As Long, kMax As Long, kMin As Long, nMax As Long, nMin As Long
  Dim i As Long, id As Long, eRow As Long, sRow As Long
 
  With Sheets("PHAN TICH")
    eRow = .Range("B" & Rows.Count).End(xlUp).Row
    If eRow < 3 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("B2:F" & eRow + 1).Value
  End With
  sRow = UBound(sArr)
  ReDim Res1(1 To sRow - 2, 1 To 3)
  ReDim Res2(1 To sRow - 2, 1 To 3)
  For i = 2 To sRow - 1
    If sArr(i, 1) <> sArr(i - 1, 1) Then fRow = i
    If sArr(i, 2) Like "*Max" Then nMax = nMax + 1 Else nMin = nMin + 1
    If sArr(i, 1) <> sArr(i + 1, 1) Then
      kMax = fRow - 1
      For id = fRow To fRow + nMax - 1
        If id = fRow + nMax - 1 Then
          If nMax < nMin Then kMax = kMax + nMin - nMax
        End If
        Res1(kMax, 1) = sArr(id, 3)
        Res1(kMax, 2) = sArr(id, 4)
        Res1(kMax, 3) = sArr(id, 5)
        kMax = kMax + 1
      Next id
      
      kMin = fRow - 1
      For id = fRow + nMax To i
        If id = i Then
          If nMin < nMax Then kMin = kMin + nMax - nMin
        End If
        Res2(kMin, 1) = sArr(id, 3)
        Res2(kMin, 2) = sArr(id, 4)
        Res2(kMin, 3) = sArr(id, 5)
        kMin = kMin + 1
      Next id
      nMax = 0: nMin = 0
    End If
  Next i
  With Sheets("PHAN TICH")
    Range("G3:I" & eRow) = Res1
    Range("R3:T" & eRow) = Res2
  End With
End Sub
 

File đính kèm

Qui ước:
_ Dữ liệu xếp max trước Min sau
_ Chặn trên và dưới của 2 kết quả cùng dòng
Mã:
Sub XepDuLieu()
  Dim sArr(), Res1(), Res2()
  Dim fRow As Long, kMax As Long, kMin As Long, nMax As Long, nMin As Long
  Dim i As Long, id As Long, eRow As Long, sRow As Long

  With Sheets("PHAN TICH")
    eRow = .Range("B" & Rows.Count).End(xlUp).Row
    If eRow < 3 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("B2:F" & eRow + 1).Value
  End With
  sRow = UBound(sArr)
  ReDim Res1(1 To sRow - 2, 1 To 3)
  ReDim Res2(1 To sRow - 2, 1 To 3)
  For i = 2 To sRow - 1
    If sArr(i, 1) <> sArr(i - 1, 1) Then fRow = i
    If sArr(i, 2) Like "*Max" Then nMax = nMax + 1 Else nMin = nMin + 1
    If sArr(i, 1) <> sArr(i + 1, 1) Then
      kMax = fRow - 1
      For id = fRow To fRow + nMax - 1
        If id = fRow + nMax - 1 Then
          If nMax < nMin Then kMax = kMax + nMin - nMax
        End If
        Res1(kMax, 1) = sArr(id, 3)
        Res1(kMax, 2) = sArr(id, 4)
        Res1(kMax, 3) = sArr(id, 5)
        kMax = kMax + 1
      Next id
     
      kMin = fRow - 1
      For id = fRow + nMax To i
        If id = i Then
          If nMin < nMax Then kMin = kMin + nMax - nMin
        End If
        Res2(kMin, 1) = sArr(id, 3)
        Res2(kMin, 2) = sArr(id, 4)
        Res2(kMin, 3) = sArr(id, 5)
        kMin = kMin + 1
      Next id
      nMax = 0: nMin = 0
    End If
  Next i
  With Sheets("PHAN TICH")
    Range("G3:I" & eRow) = Res1
    Range("R3:T" & eRow) = Res2
  End With
End Sub
hay quá, cảm ơn bạn nhé
Bài đã được tự động gộp:

Chạy thử đoạn code này xem sao.
Kt quả điền vào sheet "PHANTICH"
Mã:
Sub a_sort_noiluc()
Dim SArr As Variant
Dim Res1 As Variant
Dim Res2 As Variant
Dim i As Long, j As Long, x, z
SArr = Sheet8.Range("a2:f23")
ReDim Res1(1 To UBound(SArr), 1 To 3)
ReDim Res2(1 To UBound(SArr), 1 To 3)
z = 2
Do While z < UBound(SArr)
    For i = z + 1 To UBound(SArr)
        If SArr(i, 2) <> SArr(z, 2) Then Exit For
    Next i
    x = i - z
    If x = 6 Then
        For i = z To z + 2
            For j = 1 To 3
                Res1(i - 1, j) = SArr(i, j + 3)
                Res2(i - 1, j) = SArr(i + 3, j + 3)
            Next j
        Next i
    End If
    If x = 5 Then
        For i = z To z + 2
            For j = 1 To 3
                Res1(i - 1, j) = SArr(i, j + 3)
            Next j
        Next i
        i = z
        For j = 1 To 3
            Res2(i, j) = SArr(i + 3, j + 3)
        Next j
        i = z + 2
        For j = 1 To 3
            Res2(i, j) = SArr(i + 2, j + 3)
        Next j
    End If
    If x = 4 Then
        For i = z To z + 1
            For j = 1 To 3
                Res1(i - 1, j) = SArr(i, j + 3)
                Res2(i - 1, j) = SArr(i + 2, j + 3)
            Next j
        Next i
    End If
    z = x + z
Loop
With Sheet8
.Range("g3").Resize(UBound(Res1), UBound(Res1, 2)).ClearContents
.Range("g3").Resize(UBound(Res1), UBound(Res1, 2)) = Res1
.Range("r3").Resize(UBound(Res2), UBound(Res2, 2)).ClearContents
.Range("r3").Resize(UBound(Res2), UBound(Res2, 2)) = Res2
End With
End Sub
hay quá, cảm ơn bạn nhé
 
Chạy thử đoạn code này xem sao.
Kt quả điền vào sheet "PHANTICH"
Mã:
Sub a_sort_noiluc()
Dim SArr As Variant
Dim Res1 As Variant
Dim Res2 As Variant
Dim i As Long, j As Long, x, z
SArr = Sheet8.Range("a2:f23")
ReDim Res1(1 To UBound(SArr), 1 To 3)
ReDim Res2(1 To UBound(SArr), 1 To 3)
z = 2
Do While z < UBound(SArr)
    For i = z + 1 To UBound(SArr)
        If SArr(i, 2) <> SArr(z, 2) Then Exit For
    Next i
    x = i - z
    If x = 6 Then
        For i = z To z + 2
            For j = 1 To 3
                Res1(i - 1, j) = SArr(i, j + 3)
                Res2(i - 1, j) = SArr(i + 3, j + 3)
            Next j
        Next i
    End If
    If x = 5 Then
        For i = z To z + 2
            For j = 1 To 3
                Res1(i - 1, j) = SArr(i, j + 3)
            Next j
        Next i
        i = z
        For j = 1 To 3
            Res2(i, j) = SArr(i + 3, j + 3)
        Next j
        i = z + 2
        For j = 1 To 3
            Res2(i, j) = SArr(i + 2, j + 3)
        Next j
    End If
    If x = 4 Then
        For i = z To z + 1
            For j = 1 To 3
                Res1(i - 1, j) = SArr(i, j + 3)
                Res2(i - 1, j) = SArr(i + 2, j + 3)
            Next j
        Next i
    End If
    z = x + z
Loop
With Sheet8
.Range("g3").Resize(UBound(Res1), UBound(Res1, 2)).ClearContents
.Range("g3").Resize(UBound(Res1), UBound(Res1, 2)) = Res1
.Range("r3").Resize(UBound(Res2), UBound(Res2, 2)).ClearContents
.Range("r3").Resize(UBound(Res2), UBound(Res2, 2)) = Res2
End With
End Sub
Nếu 2 Max và 3Min thì sao
 
Qui ước:
_ Dữ liệu xếp max trước Min sau
_ Chặn trên và dưới của 2 kết quả cùng dòng
Mã:
Sub XepDuLieu()
  Dim sArr(), Res1(), Res2()
  Dim fRow As Long, kMax As Long, kMin As Long, nMax As Long, nMin As Long
  Dim i As Long, id As Long, eRow As Long, sRow As Long

  With Sheets("PHAN TICH")
    eRow = .Range("B" & Rows.Count).End(xlUp).Row
    If eRow < 3 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("B2:F" & eRow + 1).Value
  End With
  sRow = UBound(sArr)
  ReDim Res1(1 To sRow - 2, 1 To 3)
  ReDim Res2(1 To sRow - 2, 1 To 3)
  For i = 2 To sRow - 1
    If sArr(i, 1) <> sArr(i - 1, 1) Then fRow = i
    If sArr(i, 2) Like "*Max" Then nMax = nMax + 1 Else nMin = nMin + 1
    If sArr(i, 1) <> sArr(i + 1, 1) Then
      kMax = fRow - 1
      For id = fRow To fRow + nMax - 1
        If id = fRow + nMax - 1 Then
          If nMax < nMin Then kMax = kMax + nMin - nMax
        End If
        Res1(kMax, 1) = sArr(id, 3)
        Res1(kMax, 2) = sArr(id, 4)
        Res1(kMax, 3) = sArr(id, 5)
        kMax = kMax + 1
      Next id
     
      kMin = fRow - 1
      For id = fRow + nMax To i
        If id = i Then
          If nMin < nMax Then kMin = kMin + nMax - nMin
        End If
        Res2(kMin, 1) = sArr(id, 3)
        Res2(kMin, 2) = sArr(id, 4)
        Res2(kMin, 3) = sArr(id, 5)
        kMin = kMin + 1
      Next id
      nMax = 0: nMin = 0
    End If
  Next i
  With Sheets("PHAN TICH")
    Range("G3:I" & eRow) = Res1
    Range("R3:T" & eRow) = Res2
  End With
End Sub
nếu mình muốn thay đổi số cột kết quả thì phải thay đổi nhửng thông số nào vậy bạn ?
 
nếu mình muốn thay đổi số cột kết quả thì phải thay đổi nhửng thông số nào vậy bạn ?
Khai báo lại mảng kết quả
ReDim Res1(1 To sRow - 2, 1 To 3)
ReDim Res2(1 To sRow - 2, 1 To 3)
Thành
ReDim Res1(1 To sRow - 2, 1 To socot)
ReDim Res2(1 To sRow - 2, 1 To socot)
Nhập số vào "Socot"

Gán thêm các cột kết quả mới vào sau các dòng lệnh
Res1(kMax, 1) = sArr(id, 3)
Res1(kMax, 2) = sArr(id, 4)
Res1(kMax, 3) = sArr(id, 5)
...
Res2(kMin, 1) = sArr(id, 3)
Res2(kMin, 2) = sArr(id, 4)
Res2(kMin, 3) = sArr(id, 5)
...

Chỉnh lại cột trả kết quả vào Sheet
With Sheets("PHAN TICH")
Range("G3:I" & eRow) = Res1
Range("R3:T" & eRow) = Res2
End With
 
Web KT

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

Back
Top Bottom