Hỗ trợ xử lý bài toán

Liên hệ QC

painynguyen88

Thành viên mới
Tham gia
5/6/22
Bài viết
4
Được thích
1
Như tiêu đề, hiện em đang có bài tập cần sắp xếp lại bảng excel với dữ liệu có sẵn thành 1 bảng excel mới.
Anh Chị có cao kiến giúp em với.
 
Lần chỉnh sửa cuối:
...
Nên đọc lại Nội quy diễn đàn và sửa lại tiêu đề cho phù hợp.
Bảo thớt cần đọc lại bài của mình nữa.
Câu đầu thì là bài tập. Câu cuối thì là "sếp sắp kill".
Tôi không hiểu "kill" là cái gì. Nhưng đoán chừng thì ở chỗ này có lệ sếp "kill" nhân viên làm bài tập. Và như vậy, có lẽ kill là kiêu/kêu.
 
Upvote 0
Như tiêu đề, hiện em đang có bài tập cần sắp xếp lại bảng excel với dữ liệu có sẵn thành 1 bảng excel mới.
Anh Chị có cao kiến giúp em với. Sếp sắp kill e rồi :(
STTHạng mụcTrắngXanhĐỏVàng
1Phase 1Phase 1Phase 1Phase 1
2CừuPhase 1Phase 1Phase 1Phase 1
3HeoPhase 1Phase 1Phase 2Phase 2
4Phase 2Phase 2Phase 1Phase 1
5ChuộtPhase 1Phase 1Phase 2Phase 1
6ChimPhase 1Phase 1Phase 1Phase 1

Em muốn xếp thành hình như dưới ạ:
STTHạng mụcPhase 1Phase 2
1Trắng
2TrắngCừu
3TrắngChuột
4TrắngChim
5Xanh
6XanhCừu
….
Lần sau nên gởi file
Mã:
Sub ABC()
  Dim arr(), c(), res(), sRow&, sCol&, i&, j&, pha&, k&
 
  arr = Range("B2:F" & Range("B1000000").End(xlUp).Row).Value
  sRow = UBound(arr): sCol = UBound(arr, 2)
  ReDim res(1 To sRow * sCol, 1 To 4)
  For j = 2 To sCol
    ReDim c(1 To 2)
    For i = 2 To sRow
      pha = Right(arr(i, j), 1)
      c(pha) = c(pha) + 1
      res(k + c(pha), 1) = k + c(pha)
      res(k + c(pha), 2) = arr(1, j)
      res(k + c(pha), pha + 2) = arr(i, 1)
    Next i
    If c(1) > c(2) Then k = k + c(1) Else k = k + c(2)
  Next j
  Range("H3").Resize(UBound(res), 4) = res
End Sub
 

File đính kèm

  • TrauBo.xlsb
    16.3 KB · Đọc: 15
Upvote 0
Lần sau nên gởi file
Mã:
Sub ABC()
  Dim arr(), c(), res(), sRow&, sCol&, i&, j&, pha&, k&
 
  arr = Range("B2:F" & Range("B1000000").End(xlUp).Row).Value
  sRow = UBound(arr): sCol = UBound(arr, 2)
  ReDim res(1 To sRow * sCol, 1 To 4)
  For j = 2 To sCol
    ReDim c(1 To 2)
    For i = 2 To sRow
      pha = Right(arr(i, j), 1)
      c(pha) = c(pha) + 1
      res(k + c(pha), 1) = k + c(pha)
      res(k + c(pha), 2) = arr(1, j)
      res(k + c(pha), pha + 2) = arr(i, 1)
    Next i
    If c(1) > c(2) Then k = k + c(1) Else k = k + c(2)
  Next j
  Range("H3").Resize(UBound(res), 4) = res
End Sub
Anh ơi, Anh có thể giúp em nếu cho thêm phase 3 và phase 4 hoặc giá trị rỗng bên trong bảng 1 thì đoạn code sẽ ntn dc k ạ?
Em xin đợi anh cho thêm hướng dẫn ạ.
Em k up đc file vì laptop chặn upload file ra ngoài :(.
Em cảm ơn a nhiều.
 
Lần chỉnh sửa cuối:
Upvote 0
Bảo thớt cần đọc lại bài của mình nữa.
Câu đầu thì là bài tập. Câu cuối thì là "sếp sắp kill".
Tôi không hiểu "kill" là cái gì. Nhưng đoán chừng thì ở chỗ này có lệ sếp "kill" nhân viên làm bài tập. Và như vậy, có lẽ kill là kiêu/kêu.
Vâng, em xin ghi nhận ý kiến của bác để việc tham gia diễn đàn k vi phạm thêm.
Còn khi đi làm thì em hay nói vui vui các công việc đc giao như bài tập, bài toán cần giải. Chứ cũng k phải là bài tập trong hàm ý là bài tập của sinh viên ạ :D.
 
Upvote 0
Anh ơi, Anh có thể giúp em nếu cho thêm phase 3 và phase 4 hoặc giá trị rỗng bên trong bảng 1 thì đoạn code sẽ ntn dc k ạ?
Em xin đợi anh cho thêm hướng dẫn ạ.
Em k up đc file vì laptop chặn upload file ra ngoài :(.
Em cảm ơn a nhiều.
Tối đa 9 Phase
Mã:
Sub ABC()
  Dim arr(), c(), res(), sRow&, sCol&, i&, j&, pha&, k&
  Const cp As Long = 9 'Toi da 9 Phase
 
  arr = Range("B2:F" & Range("B1000000").End(xlUp).Row).Value
  sRow = UBound(arr): sCol = UBound(arr, 2)
  ReDim res(1 To sRow * sCol, 1 To cp + 2)
  For j = 2 To sCol
    ReDim c(0 To cp)
    For i = 2 To sRow
      If arr(i, j) <> Empty Then
        pha = Right(arr(i, j), 1)
        c(pha) = c(pha) + 1
        res(k + c(pha), 1) = k + c(pha)
        res(k + c(pha), 2) = arr(1, j)
        res(k + c(pha), pha + 2) = arr(i, 1)
        If c(0) < c(pha) Then c(0) = c(pha)
      End If
    Next i
    k = k + c(0)
  Next j
  Range("H3").Resize(UBound(res), cp + 2) = res
End Sub
Lưu ý, theo nội quy của diễn đàn bạn không nên dùng từ viết tắt
 
Upvote 0
Tối đa 9 Phase
Mã:
Sub ABC()
  Dim arr(), c(), res(), sRow&, sCol&, i&, j&, pha&, k&
  Const cp As Long = 9 'Toi da 9 Phase
 
  arr = Range("B2:F" & Range("B1000000").End(xlUp).Row).Value
  sRow = UBound(arr): sCol = UBound(arr, 2)
  ReDim res(1 To sRow * sCol, 1 To cp + 2)
  For j = 2 To sCol
    ReDim c(0 To cp)
    For i = 2 To sRow
      If arr(i, j) <> Empty Then
        pha = Right(arr(i, j), 1)
        c(pha) = c(pha) + 1
        res(k + c(pha), 1) = k + c(pha)
        res(k + c(pha), 2) = arr(1, j)
        res(k + c(pha), pha + 2) = arr(i, 1)
        If c(0) < c(pha) Then c(0) = c(pha)
      End If
    Next i
    k = k + c(0)
  Next j
  Range("H3").Resize(UBound(res), cp + 2) = res
End Sub
Lưu ý, theo nội quy của diễn đàn bạn không nên dùng từ viết tắt
Em cảm ơn a nhiều ạ. Chúc anh 1 ngày mới sức khỏe ạ!
 
Upvote 0
...
Còn khi đi làm thì em hay nói vui vui các công việc đc giao như bài tập, bài toán cần giải. Chứ cũng k phải là bài tập trong hàm ý là bài tập của sinh viên ạ .
Dóc.
Người thường làm bài thì cũng biết làm gần hết, chỉ hỏi một vài điểm bí.
Có đâu nhờ làm giùm từ đầu đến cuối, còn quýnh đít lên "gần chết đến nơi"

...Lưu ý, theo nội quy của diễn đàn bạn không nên dùng từ viết tắt
Nước đổ lá môn. . .
 
Upvote 0
Web KT
Back
Top Bottom