trongdungs
Thành viên hoạt động
- Tham gia
- 19/5/09
- Bài viết
- 147
- Được thích
- 13
- Nghề nghiệp
- sinh vien
công thức kiểu này máy chạy hơi chậm. Các bác có cách nào tăng tốc được không. Hiện giờ dữ liệu em cập nhập đến hơn 1000 dòng rồi và excel bắt đầu chạy như rùa.
trongdungs em biết cách làm bằng Privot nhưng yêu cầu thực tế cần phải sử dụng hàm. Bác thử giúp em đi.
Học được một chiêu của ndu:công thức kiểu này máy chạy hơi chậm. Các bác có cách nào tăng tốc được không. Hiện giờ dữ liệu em cập nhập đến hơn 1000 dòng rồi và excel bắt đầu chạy như rùa.
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim Tg As Variant
Tg = Timer
Range("B6:M10").ClearContents
Range("B6:M10").FormulaR1C1 = _
"=SUMPRODUCT((nhom=R4C)*(nam=namDK)*(nguoi=R2C2)*dulieu)"
Range("B6:M10").Value = Range("B6:M10").Value
Application.ScreenUpdating = True
MsgBox Timer - Tg
End Sub
Chọn một số cách này thử xem:Bác cho em hỏi thêm, làm thế nào để ẩn nút lệnh khi in.
nếu có thêm yêu cầu xất dữ liệu trên vùng không liên tục thì em phải viết như thế nào . ô màu xanh sẽ đưa dữ liệu khác vào.
Option Explicit
[B]Sub TongHop()[/B]
Dim Sh As Worksheet, Cls As Range, Rng As Range, sRng As Range, Rg0 As Range
Dim jJ As Long, eRw As Long, Col As Byte, Cot As Byte
Dim MyAdd As String, StrC As String: Const CT As String = "-"
Sheets("YC2").Select: Set Sh = Sheets("Data")
Set Rng = Sh.Range(Sh.[k4], Sh.[iv4].End(xlToLeft))
1 ' Chép Các Ma "C*" Cua DATA Vo Bién:'
For Each Cls In Rng
StrC = StrC & Right(CT & Cls.Value, 3)
Next Cls
Set Rng = Sh.Range(Sh.[c4], Sh.[c65500].End(xlUp))
eRw = [a65500].End(xlUp).Row
2 ' Xóa Du Lieu Cu:'
[C7].Resize(eRw, 250).ClearContents
3 'Tao Vòng lap Duyet Theo Ma "A*" Cua YC2:'
For Each Cls In Range([D4], [iv4].End(xlToLeft))
Col = Cls.Column
4 'Tao Vòng lap Duyet Dén Hét Các Hàng Cua YC2:'
For jJ = 7 To eRw
If Cells(jJ, Col).Interior.ColorIndex < 9 Then
5 'Xác Dinh Cot Chúa Du Lieu Càn Tìm Tai DATA So Vói Chuan:'
Cot = InStr(StrC, Cells(jJ, "A").Value) \ 3
Set sRng = Rng.Find([B2].Value, , xlFormulas, xlWhole)
If Not sRng Is Nothing Then
MyAdd = sRng.Address
Do
If Sh.Cells(sRng.Row, "I").Value = [B3].Value Then
Cells(jJ, Col).Value = Cells(jJ, Col).Value + _
Sh.Cells(sRng.Row, "K").Offset(, Cot).Value
End If
Set sRng = Rng.FindNext(sRng)
Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
End If
End If
Next jJ
Next Cls
[B]End Sub[/B]