Giúp viết Function hàm cộng không trùng

Liên hệ QC

buctoc147

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
26/4/21
Bài viết
13
Được thích
-2
Chào tất cả mọi người !
Mình có hỏi 1 chủ đề này bên mục công thức. nhưng có lẽ rất khó. nên mình chuyển qua bên chủ đề này.
Mình cần 1 hàm tựa tựa như hàm sum, nhưng nếu trùng tên cột thời gian thì lấy giá trị dòng đầu tiên.
Như hình bên dưới. Mình cần Sum lại các giá trị có mốc thời gian không trùng ( nếu trùng lấy dòng trên cùng ) thì kết quả = 26. Nhờ mọi người viết Function giúp mình. Xin cảm ơn

1619520660443.png
 

File đính kèm

  • sum no trung.xlsm
    15.5 KB · Đọc: 7
Lần chỉnh sửa cuối:
hỏi 1 chủ đề này bên mục công thức. nhưng có lẽ rất khó
Nói vậy khác gì chê bai các đáp án bên kia... ấy ấy, hổng sợ họ tự ái à? Trong khi các đáp án rất tốt mà, nếu chỗ nào chửa được thì mình lên tiếng bàn tiếp chứ nhỉ.


 
Upvote 0
Nói vậy khác gì chê bai các đáp án bên kia... ấy ấy, hổng sợ họ tự ái à? Trong khi các đáp án rất tốt mà, nếu chỗ nào chửa được thì mình lên tiếng bàn tiếp chứ nhỉ.


Đã thử hết rồi bạn ơi. Đầy đủ dữ liệu thì ok. Mà có dòng trống thì báo #n/a
1619517789608.png
 
Upvote 0
Chào tất cả mọi người !
Mình có hỏi 1 chủ đề này bên mục công thức. nhưng có lẽ rất khó. nên mình chuyển qua bên chủ đề này.
Mình cần 1 hàm tựa tựa như hàm sum, nhưng nếu trùng tên cột thời gian thì lấy giá trị dòng đầu tiên.
Như hình bên dưới. Mình cần Sum lại các giá trị có mốc thời gian không trùng ( nếu trùng lấy dòng trên cùng ) thì kết quả = 26. Nhờ mọi người viết Function giúp mình. Xin cảm ơn
View attachment 257735
Thử công thức dưới đây, nếu không được sẽ thử vba
Mã:
=SUMPRODUCT((C4:C1048575<>C5:C1048576)*D5:D1048576)
 
Upvote 0
Bạn xem thử, dùng cột phụ thôi.
PHP:
=IF(C6<>C5,1,0)*D6
 

File đính kèm

  • SumNoTrung_Rev.xlsm
    10.7 KB · Đọc: 7
Upvote 0
Thử công thức dưới đây, nếu không được sẽ thử vba
Mã:
=SUMPRODUCT((C4:C1048575<>C5:C1048576)*D5:D1048576)

Dạ cảm ơn bạn. 15:00 xuất hiện rồi nó vẫn cộng --> Kết quả sai
1619520502884.png
Bài đã được tự động gộp:

Bạn xem thử, dùng cột phụ thôi.
PHP:
=IF(C6<>C5,1,0)*D6
Cột phụ thì mình làm được rồi. ở đây mình không cần cột phụ
 
Upvote 0
Dạ cảm ơn bạn. 15:00 xuất hiện rồi nó vẫn cộng --> Kết quả sai
View attachment 257750
Bài đã được tự động gộp:


Cột phụ thì mình làm được rồi. ở đây mình không cần cột phụ
Áp dụng cho file bài 1 thế nào?
Bài đã được tự động gộp:

Hàm tự tạo
Cú pháp: =congthoigian(C5:D14)
Mã:
Function congthoigian(dl_)
Dim dl, i, k, tg(24)
dl = dl_
For i = 1 To UBound(dl)
    k = Hour(dl(i, 1))
    If tg(k) = "" Then
        tg(k) = k
        congthoigian = congthoigian + dl(i, 2)
    End If
Next i
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Áp dụng cho file bài 1 thế nào?
Bài đã được tự động gộp:

Hàm tự tạo
Cú pháp: =congthoigian(C5:D14)
Mã:
Function congthoigian(dl_)
Dim dl, i, k, tg(24)
dl = dl_
For i = 1 To UBound(dl)
    k = Hour(dl(i, 1))
    If tg(k) = "" Then
        tg(k) = k
        congthoigian = congthoigian + dl(i, 2)
    End If
Next i
End Function
Trường hợp 2 cột đó nằm ở xa nhau thì công thức điều chỉnh ra sao anh
1619521280898.png
 
Upvote 0
Việc này dễ thôi nhưng có lẽ tốt nhất là bạn đưa dữ liệu tương đối tổng quát lên để chỉnh 1 thể chắc sẽ nhanh hơn
Thì bạn viết hàm sao phải có 2 đối số để người dùng tùy chọn chứ. Ví dụ =Sum(A,B ). Trong đó A là cột thời gian, B là cột Giá Trị, Cho dù nó nằm ở đâu hay nằm sheet khác thì công thức nó vẫn đúng
 
Upvote 0
Thì bạn viết hàm sao phải có 2 đối số để người dùng tùy chọn chứ. Ví dụ =Sum(A,B ). Trong đó A là cột thời gian, B là cột Giá Trị, Cho dù nó nằm ở đâu hay nằm sheet khác thì công thức nó vẫn đúng
Không vấn đề. Có cái là có file tổng quát thì đỡ phải hỏi thêm.
---
Dữ liệu thời gian của bạn nằm trên 1 cột hay là có thể nhiều vùng?
 
Upvote 0
PHP:
Function SumDup(Arr1 As Variant, Arr2 As Variant) As Double
    If Arr1.Count <> Arr2.Count Then
        MsgBox "Chon 2 cot voi so dong bang nhau !!!"
    Else
        Set dic = CreateObject("scripting.dictionary")
        For i = 1 To Arr1.Count
            If Not dic.exists(Arr1(i).Value) Then
                dic.Add Arr1(i).Value, i
                SumDup = SumDup + Arr2(i)
            End If
        Next i
    End If
End Function
Đi hỏi mà cũng hơi thái độ. Xem thử đúng ý chưa bạn.
 
Lần chỉnh sửa cuối:
Upvote 0
Nói vậy khác gì chê bai các đáp án bên kia... ấy ấy, hổng sợ họ tự ái à? Trong khi các đáp án rất tốt mà, nếu chỗ nào chửa được thì mình lên tiếng bàn tiếp chứ nhỉ.
...
Đã thử chạy đúng 100% chưa?

... Đi hỏi mà cũng hơi thái độ. Xem thử đúng ý chưa bạn.
Quéo-cằm tu đờ cơ-lấp. Giờ mới biết hả.

Code:
Function CongTong(rg As Range, Optional col As Long = 2) As Double
Dim gio(0 To 1000000) As Boolean, chiSo As Long
For i = 1 To rg.Rows.Count
If rg.Cells(i,1).Value <> "" Then
chiSo = FIX(rg.Cells(i,1).Value2*24)
If Not gio(chiSo) Then
CongTong = CongTong + rg.Cells(i,col).Value
gio(chiSo) = True ' đánh dấu đã tính giờ này
End If
End If
Next i
' code này chỉ chủ yếu để súp-mót không bắt bẻ được là bài không theo chủ đề. Chạy được hay không là chuyện khác :p
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Code:
Function CongTong(rg As Range, Optional col As Long = 2) As Double
Dim gio(0 To 1000000) As Boolean, chiSo As Long
For i = 1 To rg.Rows.Count
If rg.Cells(i,1).Value <> "" Then
chiSo = FIX(rg.Cells(i,1).Value2*24)
If Not gio(chiSo) Then
CongTong = CongTong + rg.Cells(i,col).Value
gio(chiSo) = True ' đánh dấu đã tính giờ này
End If
End If
Next i
' code này chỉ chủ yếu để súp-mót không bắt bẻ được là bài không theo chủ đề. Chạy được hay không là chuyện khác :p
dạ thầy, có thể sau code này người ta sẽ bắt bẻ đưa ra thêm trường hợp là vùng dữ liệu đó nằm ngang nữa đó thầy, nên sẽ có bàn thêm dài dài đó thầy
 
Upvote 0
dạ thầy, có thể sau code này người ta sẽ bắt bẻ đưa ra thêm trường hợp là vùng dữ liệu đó nằm ngang nữa đó thầy, nên sẽ có bàn thêm dài dài đó thầy
Bạn không chịu đọc dòng chú thích. Code ấy chỉ để bài không bị xoá (lý do giản dị: bài trước đó bị xoá)

Nếu dữ liệu nằm tùm lum thì chịu khó đọc cái thớt "anh chị em sinh đôi" với thớt này. Bài #26 tôi có nêu ra hướng giải quyết.
 
Upvote 0
Cũng không tính trả lời gì đâu nhưng thấy công thức bác @HieuCD hay mà bạn không dùng hơi uổng, nên sửa lại chút xem thử dùng được không (Vùng nào giờ trống chắc ô cần sum cũng không có số liệu gì đâu ha)
Mã:
=SUMPRODUCT((MATCH(C5:C17&"",C5:C17&"",0)=ROW(1:13))*D5:D17)
 
Upvote 0
Web KT

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

Back
Top Bottom