Mục đích để làm gì hả bạn.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!
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? Thanks!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
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?!!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!
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.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!
Người ta trích dẫn đàng hoàng mà. Người ta nói trong ngữ cảnh cụ thể.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?!!
Trả lờithì 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
Tức làm theo lời khuyên thì phải làm thêm công đoạn đỏ đỏ ở lời khuyê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? Cảm ơn!
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
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)
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é. Nhưng mình chị làm đượcLà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é!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ư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Ạ@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
Copy ra toàn bộ vùng F2:Q676 rồi chạy đoạn code dưới đây.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)
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