loinguyen212
Thành viên thường trực




- Tham gia
- 21/2/14
- Bài viết
- 254
- Được thích
- 35
Không thấy bác SA_DQ cho mượn dao bén...
Ban đầu em thử sort ngay trên Range, và kết quả là hỏng luôn cả dữ liệu gốc,. . . Bác chỉ dẫn thêm cho em với.
Option Explicit
Sub TH_Arr()
Dim Arr(), Rng As Range
Dim Rws As Long, J&, W&, TgN#, TgX#
Dim Tmp$, SF$, Tong$
Set Rng = [B2].CurrentRegion: Rws = Rng.Rows.Count
Rng.Sort Key1:=Range("A3"), Order1:=xlAscending, Key2:=Range("B3") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom
Arr() = [A3].Resize(Rws, 4).Value
ReDim dArr(1 To 2 * Rws, 1 To 6): Tong = [k3].Value
For J = 1 To Rws
Tmp = Left(Arr(J, 2), 1): SF = Arr(J, 1)
If SF = "" Then Exit For
W = W + 1
dArr(W, 1) = Arr(J, 1): dArr(W, 2) = Arr(J, 2)
If Tmp = "N" Then
dArr(W, 3) = Arr(J, 3): dArr(W, 4) = Arr(J, 4)
TgN = TgN + Arr(J, 4)
ElseIf Tmp = "X" Then
dArr(W, 5) = Arr(J, 3): dArr(W, 6) = Arr(J, 4)
TgX = TgX + Arr(J, 4)
End If
If SF <> Arr(J + 1, 1) Then
W = W + 1: dArr(W, 2) = Tong
dArr(W, 4) = TgN: TgN = 0
dArr(W, 6) = TgX: TgX = 0
End If
Next J
[j5].Resize(W, 6).Value = dArr()
End Sub
Thế còn "sort trên mảng" thì không được hả bác??
Nếu như bắt buộc chắc em sẽ phải thêm phần số TT như bác nói, vì em đã tạo vùng trên sheet để nhập dữ liệu, nên việc thay đổi để đánh số TT tự động chắc sẽ cần thêm chút thời gian.1./ Để khỏi hỏng dữ liệu (DL) góc thì trước khi sắp xếp nên cho nó thể cột STT; Để sau đó ta lập lại trật tư như cũ, khi ta muốn.
3./ Trong macro chưa có lệnh xếp lại trật tự DL như cũ đo chưa thêm cột [STT]; Điều này bạn tự làm để đúng í mình & điều này sẽ chỉ có lợi cho bạn.
Nếu không được em sẽ gửi dữ liệu lên.Chuyện này cũng cũng có nghe trên diễn đàn rồi; Bạn tìm tiếp xem sao?!
Bài #5 có ai giúp cho em với, phần này hơi giống với câu lệnh SQL group by, em viết chưa được.
Nếu dùng công thức thì khi em xóa vùng dữ liệu thì còn tính được không ạ. Vùng từ C2:G15 là vùng em vừa dùng advanced filter để lọc ra từ dữ liệu nguồn. (vùng này là vùng tạm, bởi sau khi dùng xong thì em xóa luôn).Làm già mà to tác thế không biết?
Xài hàm DSUM() như tham khảo dưới đây là được mà.
=DSUM(D2:G15,G2,L5:L6)
(Có thể kết hợp với 1 macro; khỏe re.)
Thú thật chiều hnay em cũng đã tìm ra lời giải, nhưng hơi dài lê thê, em phải đánh vật với Dic và mảng tạm mấy ngày rồi, không ngờ có cách dễ dàng và ngắn gọn hơn, em đọc chưa hiểu hết code nên chắc phải ngâm thêm. Cảm ơn bác lần nữa.
sao không báo cáo kiểu này nhỉ .Quay lại với bài này dữ liệu nhưng cách trình bày có khác, em cũng thử mọi cách nhưng bó tay, hai biến khác nhau không biết đưa vào mảng như thế nào, nhờ các bác giải giúp.
Quay lại với bài này dữ liệu nhưng cách trình bày có khác, em cũng thử mọi cách nhưng bó tay, hai biến khác nhau không biết đưa vào mảng như thế nào, nhờ các bác giải giúp.
Public Sub GPE()
Application.ScreenUpdating = False
Dim sArr(), dArr(), tArr(), I As Long, Tem As String, Num1 As Long, Num2 As Long, K As Long
'--------------------------------------------------
tArr = Range([A3], [A3].End(xlDown)).Resize(, 4).Value
[P4:S4].Resize(UBound(tArr, 1)) = tArr
[P4:S4].Resize(UBound(tArr, 1)).Sort Key1:=[P4], Key2:=[Q4]
'--------------------------------------------------
sArr = Range("P4:S4").Resize(UBound(tArr, 1) + 1).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 5)
Tem = sArr(1, 1)
For I = 1 To UBound(sArr, 1)
If sArr(I, 1) <> Tem Then
K = IIf(Num1 > Num2, Num1, Num2)
Num1 = K: Num2 = K
Tem = sArr(I, 1)
End If
If Left(sArr(I, 2), 1) = "N" Then
Num1 = Num1 + 1
dArr(Num1, 1) = sArr(I, 1)
dArr(Num1, 2) = sArr(I, 3)
dArr(Num1, 3) = sArr(I, 4)
Else
Num2 = Num2 + 1
dArr(Num2, 1) = sArr(I, 1)
dArr(Num2, 4) = sArr(I, 3)
dArr(Num2, 5) = sArr(I, 4)
End If
Next I
[J5].Resize(K, 5) = dArr
[P4:S1000].Clear
End Sub
Cảm ơn bác, pivot thì rất ok ạ, nhưng của em dữ liệu nhiều, để ra nhiều dòng khó in ấn và nhất là xếp thích phải bố cục như thế nên em phải tìm cách viết khác.sao không báo cáo kiểu này nhỉ .
Em chưa được học vụ Num1, Num2 này, cảm ơn bác, quá tuyệt.Bảng dữ liệu không Sort nên phải qua thao tác Sort lại trong vùng tạm nào đó.