Sắp xếp dữ liệu từ lớn đến bé (1 người xem)

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

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

thaty

Thành viên mới
Tham gia
31/8/16
Bài viết
39
Được thích
6
Mình có một file excel đính kèm. Các bạn giúp mình sắp xếp dữ liệu từ lớn đến bé ở cột M trong sheet "2019CorpProduction" với. Mình loay hoay mãi mà không được. Cảm ơn các bạn!
 

File đính kèm

thì cứ sort bình thường thôi. Copy sang dạng số không để công thức kiểu gì chả sort được
 
Mình có một file excel đính kèm. Các bạn giúp mình sắp xếp dữ liệu từ lớn đến bé ở cột M trong sheet "2019CorpProduction" với. Mình loay hoay mãi mà không được. Cảm ơn các bạn!
Mục đích để làm gì hả bạn.
 
vì mình muốn xem những công ty nào đóng góp nhiều nhất cho mỗi tháng bạn ạ
 
Làm theo cách này thì mình lại phải thêm một công đoạn thủ công nữa. Có cách nào hay hơn không hả bạn!
Vậy công đoạn thủ công thêm nữa của bạn là gì vậy? Biết đâu có thể xài VBA để bạn khỏi thủ công được thì sao?!!
 
Mình có một file excel đính kèm. Các bạn giúp mình sắp xếp dữ liệu từ lớn đến bé ở cột M trong sheet "2019CorpProduction" với. Mình loay hoay mãi mà không được. Cảm ơn các bạn!
Hình như công thức sumif() bị thừa điều kiện cột C, bạn kiểm tra xem sao.
 
Vậy công đoạn thủ công thêm nữa của bạn là gì vậy? Biết đâu có thể xài VBA để bạn khỏi thủ công được thì sao?!!
Người ta trích dẫn đàng hoàng mà. Người ta nói trong ngữ cảnh cụ thể.
Trích
thì cứ sort bình thường thôi. Copy sang dạng số không để công thức kiểu gì chả sort được
Trả lời
Làm theo cách này thì mình lại phải thêm một công đoạn thủ công nữa. Có cách nào hay hơn không hả bạn? Cảm ơn!
Tức làm theo lời khuyên thì phải làm thêm công đoạn đỏ đỏ ở lời khuyên. :D
 
Làm đại, không trúng thì làm lại:
PHP:
Sub XepTheoThang8()
Dim WF As Object, Rng As Range, sRng As Range, RgA As Range
Dim Rws As Long, Col As Integer, J As Long, W As Integer, Max_ As Long, Dm As Integer, Tmr As Double
Dim MyAdd As String

Rws = [M2].CurrentRegion.Rows.Count
Col = [M2].CurrentRegion.Columns.Count
Set Rng = [M2].Resize(Rws)
Set WF = Application.WorksheetFunction
Max_ = WF.Max(Rng):                                                Tmr = Timer()
ReDim Arr(1 To Rws, 1 To Col)
For J = Max_ To 0 Step -1
    Set sRng = Rng.Find(J, , xlValues, xlWhole)
    If Not sRng Is Nothing Then
        MyAdd = sRng.Address
        Do
            W = W + 1:                                              Set RgA = Cells(sRng.Row, "A")
            For Dm = 1 To Col
                Arr(W, Dm) = RgA.Offset(, Dm - 1).Value
            Next Dm
            Set sRng = Rng.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    End If
Next J
[A2].Resize(W, Col).Value = Arr():                                 [T1].Value = Timer() - Tmr
End Sub
 
@thaty
Bạn thử làm như sau
Tại F2, thay công thức trên bằng công thức dưới. Công thức dưới không dùng điều kiện cột C, kết quả tính vẫn tương đương công thức trên
Mã:
SUMIFS('2019CorpData'!$BB$2:$BB$20000,'2019CorpData'!$C$2:$C$20000,'2019CorpProduction'!$C2,'2019CorpData'!$A$2:$A$20000,'2019CorpProduction'!$D2,'2019CorpData'!$P$2:$P$20000,'2019CorpProduction'!F$1)
SUMIFS('2019CorpData'!$BB$2:$BB$20000,'2019CorpData'!$A$2:$A$20000,'2019CorpProduction'!$D2,'2019CorpData'!$P$2:$P$20000,'2019CorpProduction'!F$1)
Copy ra toàn bộ vùng F2:Q676 rồi chạy đoạn code dưới đây.
Sau khi chạy code, các công thức vẫn được giữ nguyên
Mã:
Sub Sort()
Dim Nguon, Dong
Dim Tam, Max_
Dim Kq
Dim i, j, k
Nguon = Sheet1.Range("A1").CurrentRegion
Dong = UBound(Nguon)
ReDim Kq(1 To Dong - 1, 1 To 1)
For i = 2 To Dong
    If Max_ < Nguon(i, 13) Then Max_ = Nguon(i, 13)
Next i
ReDim Tam(Max_)
For i = 2 To Dong
    k = Nguon(i, 13)
    Tam(k) = Tam(k) + 1
Next i
k = 0
For i = Max_ To 0 Step -1
    If Tam(i) <> "" Then
        k = k + Tam(i)
        Tam(i) = k
    End If
Next i
For i = Dong To 2 Step -1
    k = Nguon(i, 13)
    j = Tam(k)
    Tam(k) = Tam(k) - 1
    Kq(j, 1) = Nguon(i, 4)
Next i
Sheet1.Range("D2").Resize(Dong - 1, 1) = Kq
End Sub
 
Làm đại, không trúng thì làm lại:
PHP:
Sub XepTheoThang8()
Dim WF As Object, Rng As Range, sRng As Range, RgA As Range
Dim Rws As Long, Col As Integer, J As Long, W As Integer, Max_ As Long, Dm As Integer, Tmr As Double
Dim MyAdd As String

Rws = [M2].CurrentRegion.Rows.Count
Col = [M2].CurrentRegion.Columns.Count
Set Rng = [M2].Resize(Rws)
Set WF = Application.WorksheetFunction
Max_ = WF.Max(Rng):                                                Tmr = Timer()
ReDim Arr(1 To Rws, 1 To Col)
For J = Max_ To 0 Step -1
    Set sRng = Rng.Find(J, , xlValues, xlWhole)
    If Not sRng Is Nothing Then
        MyAdd = sRng.Address
        Do
            W = W + 1:                                              Set RgA = Cells(sRng.Row, "A")
            For Dm = 1 To Col
                Arr(W, Dm) = RgA.Offset(, Dm - 1).Value
            Next Dm
            Set sRng = Rng.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    End If
Next J
[A2].Resize(W, Col).Value = Arr():                                 [T1].Value = Timer() - Tmr
End Sub
Mình cảm ơn bạn nhiều nhé. Nhưng mình chị làm được
Làm đại, không trúng thì làm lại:
PHP:
Sub XepTheoThang8()
Dim WF As Object, Rng As Range, sRng As Range, RgA As Range
Dim Rws As Long, Col As Integer, J As Long, W As Integer, Max_ As Long, Dm As Integer, Tmr As Double
Dim MyAdd As String

Rws = [M2].CurrentRegion.Rows.Count
Col = [M2].CurrentRegion.Columns.Count
Set Rng = [M2].Resize(Rws)
Set WF = Application.WorksheetFunction
Max_ = WF.Max(Rng):                                                Tmr = Timer()
ReDim Arr(1 To Rws, 1 To Col)
For J = Max_ To 0 Step -1
    Set sRng = Rng.Find(J, , xlValues, xlWhole)
    If Not sRng Is Nothing Then
        MyAdd = sRng.Address
        Do
            W = W + 1:                                              Set RgA = Cells(sRng.Row, "A")
            For Dm = 1 To Col
                Arr(W, Dm) = RgA.Offset(, Dm - 1).Value
            Next Dm
            Set sRng = Rng.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    End If
Next J
[A2].Resize(W, Col).Value = Arr():                                 [T1].Value = Timer() - Tmr
End Sub
Mình cảm ơn bạn nhé. Nhưng mình mù mấy cái kiểu code này lắm nên không biết làm bạn ạ. Sorry bạn nhé!
Bài đã được tự động gộp:

@thaty
Bạn thử làm như sau
Tại F2, thay công thức trên bằng công thức dưới. Công thức dưới không dùng điều kiện cột C, kết quả tính vẫn tương đương công thức trên
Mã:
SUMIFS('2019CorpData'!$BB$2:$BB$20000,'2019CorpData'!$C$2:$C$20000,'2019CorpProduction'!$C2,'2019CorpData'!$A$2:$A$20000,'2019CorpProduction'!$D2,'2019CorpData'!$P$2:$P$20000,'2019CorpProduction'!F$1)
SUMIFS('2019CorpData'!$BB$2:$BB$20000,'2019CorpData'!$A$2:$A$20000,'2019CorpProduction'!$D2,'2019CorpData'!$P$2:$P$20000,'2019CorpProduction'!F$1)
Copy ra toàn bộ vùng F2:Q676 rồi chạy đoạn code dưới đây.
Sau khi chạy code, các công thức vẫn được giữ nguyên
Mã:
Sub Sort()
Dim Nguon, Dong
Dim Tam, Max_
Dim Kq
Dim i, j, k
Nguon = Sheet1.Range("A1").CurrentRegion
Dong = UBound(Nguon)
ReDim Kq(1 To Dong - 1, 1 To 1)
For i = 2 To Dong
    If Max_ < Nguon(i, 13) Then Max_ = Nguon(i, 13)
Next i
ReDim Tam(Max_)
For i = 2 To Dong
    k = Nguon(i, 13)
    Tam(k) = Tam(k) + 1
Next i
k = 0
For i = Max_ To 0 Step -1
    If Tam(i) <> "" Then
        k = k + Tam(i)
        Tam(i) = k
    End If
Next i
For i = Dong To 2 Step -1
    k = Nguon(i, 13)
    j = Tam(k)
    Tam(k) = Tam(k) - 1
    Kq(j, 1) = Nguon(i, 4)
Next i
Sheet1.Range("D2").Resize(Dong - 1, 1) = Kq
End Sub
Mình cảm ơn bạn nhiều! nhưng mấy cái code VBA này mình không biết ứng dụng. Mình có một vài loại báo cáo cần thiết kế. Bạn có thể giúp mình được không? Mình xin cảm ơn và HẬU TẠ
 
Web KT

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

Back
Top Bottom