Sử dụng hàm tính tổng mà điều kiện tham chiếu đổi từ cột sang dòng

Liên hệ QC

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
Em cần sử dụng hàm tính tổng với nhiều điều kiện. mà điều kiện tham chiếu ở kết quả đổi từ cột sang dòng

các bác giúp em với.
 

File đính kèm

Với dạng bài này gợi ý bạn nên dùng Privot table để tổng hợp, vừa nhanh vừa tiện, tuy nhiên phải bố trí lại dữ liệu đầu vào vì...hơi lủng củng, có thể dùng Sumproduct để thay thế. Thân!
 
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.
 
Bạn xem trong file có được không nhé!
 

File đính kèm

chính xác rồi. cảm ơn bác

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.
 
Chỉnh sửa lần cuối bởi điều hành viên:
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.

Hix, >1000 dòng mà dùng công thức theo yêu cầu của bạn không chậm mới là chuyện lạ?
Tuy nhiên, có cách tăng tốc nhưng bạn lại không chịu :
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.

Hay là nhờ mấy cao thủ viết cho cái Code?
Dùng Pivot trong trường hợp này dễ chịu hơn dùng công thức nhiều (đang để 9000 cho thêm dữ liệu)
 

File đính kèm

Lần chỉnh sửa cuối:
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.
Học được một chiêu của ndu:
PHP:
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
Sử dụng công thức của hoangminhtien đưa vào một nút bấm (Command Button), bấm một cái nó thống kê sheet Data 8000 dòng trong 0,640625 giây (trên máy của tôi).
Nếu Bảng dữ liệu của Bạn khác với B6:M10 thì thay đổi cho phù hợp.
Nhớ rằng đây là công thức của hoangminhtien nhé, tôi chưa biết bên trong nó như thế nào cả.
 

File đính kèm

Lần chỉnh sửa cuối:
Bác cho em hỏi thêm, làm thế nào để ẩn nút lệnh khi in.
 
Bác cho em hỏi thêm, làm thế nào để ẩn nút lệnh khi in.
Chọn một số cách này thử xem:
1. Lôi thằng Command Button ra ngoài khu vực in.
2. Chuyển Nút bấm thành một khung làm tiêu đề cho trang in luôn.
3. Ấn định phím nóng cho nó làm việc, hiện tôi ấn định cho nó là <Ctrl + T>.
 

File đính kèm

hay quá! cám ơn các bác.

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.

Bác dat_butmuc có thể sử dụng Pivot để làm bài này được không?

user-offline.png
 

File đính kèm

Lần chỉnh sửa cuối:
Bằng VBA đây, xin mời

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.
user-offline.png
Mã:
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]
 

File đính kèm

Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom