Giúp công thức cộng tổng cột SỐ lượng theo cột STT nếu trùng lấy dòng nằm trên

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Văn Toàn 1996

Thành viên chính thức
Tham gia
5/6/23
Bài viết
71
Được thích
15
Chào tất cả mọi người GPE !
Mình cần công thức, hoặc Hàm VBA để cộng tổng cột số lượng theo cột STT, nếu trùng STT thì lấy dòng trên cùng ( dòng tô màu đỏ ) . Xin cảm ơn
1713012979081.png
 

File đính kèm

  • sum stt.xlsx
    11.8 KB · Đọc: 20
Lần chỉnh sửa cuối:
Chào tất cả mọi người GPE !
Mình cần công thức, hoặc Hàm VBA để cộng tổng cột số lượng theo cột STT, nếu trùng STT thì lấy dòng trên cùng ( dòng tô màu đỏ ) . Xin cảm ơn

Công thức này chưa test kỹ:

=SUM(IF(C4:C12<>C3:C11,D4 : D12,0))

Excel đời cổ, cần kết thúc bằng Ctrl+Shift+Enter.

.
 
Lần chỉnh sửa cuối:
Công thức này chưa test kỹ:

=SUM(IF(C4:C12<>C3:C11,D4 : D12,0))

Excel đời cổ, cần kết thúc bằng Ctrl+Shift+Enter.

.
Cảm ơn bạn. Có thế nào dùng công thức bình thường, hoặc hàm VBA không ? Vì mình không muốn sử dụng công thức mãng nó làm chậm bảng tính
 
= SUMPRODUCT(--( C4:C12 <> C3:C11 ) ,D4: D12 )
cảm ơn bạn, Sau khi test 1 ngày 1 đêm thì công thức bạn vẫn không chính xác. Ví dụ
1713116532879.png
Nếu mã 1 có rồi mà nó lặp lại 1 lần nữa thì Trật lất luôn
Mình xin góp Vui mã VBA này đúng theo yêu cầu
Mã:
Sub congdon()
On Error Resume Next
Dim I As Long, K As Long, t As Long
Dim sArr(), tong As Double
Dim Dic As Object
Set Dic = CreateObject("Scripting.dictionary")
sArr = Range("C4:D12").Value
ReDim dArr(1 To UBound(sArr), 1 To 2)
For I = 1 To UBound(sArr)
    If Not Dic.exists(sArr(I, 1)) Then
        K = K + 1
        Dic(sArr(I, 1)) = K
        tong = tong + sArr(I, 2)
    End If
Next
Range("F4") = tong
Set Dic = Nothing
End Sub
 
Mình xin góp Vui mã VBA này đúng theo yêu cầu
Cái này chuyển thành hàm UDF thì tiện và đúng theo yêu cầu "hàm VBA" hơn là để chạy code thế này, mỗi lần dùng code này lại phải bấm một phát. Không tiện bằng hàm UDF, nhập dữ liệu đến đâu hiện kết quả đến đó.
 
Cái này chuyển thành hàm UDF thì tiện và đúng theo yêu cầu "hàm VBA" hơn là để chạy code thế này, mỗi lần dùng code này lại phải bấm một phát. Không tiện bằng hàm UDF, nhập dữ liệu đến đâu hiện kết quả đến đó.
Gửi bạn 1 nốt nhạc . Công thức trên Excel ví dụ = congdon(C5 : 700) enter là lụm
Mã:
Function CongDon(rngData As Range) As Double
Dim i As Long, k As Long
Dim sArr() As Variant
Dim Dic As Object
Dim tong As Double
Set Dic = CreateObject("Scripting.dictionary")
sArr = rngData.Value
For i = 1 To UBound(sArr)
    If Not Dic.exists(sArr(i, 1)) Then
        k = k + 1
        Dic(sArr(i, 1)) = k
        tong = tong + sArr(i, 2)
    End If
Next i
CongDon = tong
Set Dic = Nothing
End Function
 
Không ổn nhé, file thiếu giả định mà.
Mà công thức trên hay quá trời, quan sát và tư duy toán học bá đạo, có thể ứng dụng thực tế được.

Còn hàm của bạn thì có thể cho tình huống cụ thể ứng dụng được không?
 
Không ổn nhé, file thiếu giả định mà.
Mà công thức trên hay quá trời, quan sát và tư duy toán học bá đạo, có thể ứng dụng thực tế được.

Còn hàm của bạn thì có thể cho tình huống cụ thể ứng dụng được không?
Có đọc câu hỏi "nếu trùng lấy dòng nằm trên" chưa vậy ? Công thức hay nhưng trật lất yêu cầu câu hỏi mà cũng bay vào tung hô
 
Gửi bạn 1 nốt nhạc . Công thức trên Excel ví dụ = congdon(C5 : 700) enter là lụm
Mã:
Function CongDon(rngData As Range) As Double
Dim i As Long, k As Long
Dim sArr() As Variant
Dim Dic As Object
Dim tong As Double
Set Dic = CreateObject("Scripting.dictionary")
sArr = rngData.Value
For i = 1 To UBound(sArr)
    If Not Dic.exists(sArr(i, 1)) Then
        k = k + 1
        Dic(sArr(i, 1)) = k
        tong = tong + sArr(i, 2)
    End If
Next i
CongDon = tong
Set Dic = Nothing
End Function
Nếu Cột mã Arr(i,1) và cột số lượng cần cộng (arr(i,2) không nằm gần nhau thì .....


A
1​
A
2​
B
3​
C
4​
D
5​
B
6​
A
7​
E
8​
C
9​
D
10​
G
11​
 
Nếu Cột mã Arr(i,1) và cột số lượng cần cộng (arr(i,2) không nằm gần nhau thì .....


A
1​
A
2​
B
3​
C
4​
D
5​
B
6​
A
7​
E
8​
C
9​
D
10​
G
11​
1 nốt nhạc em trai
Mã:
Function congdoncachxa(inputRange As Range) As Long
Dim i As Long, k As Long, tong As Double
Dim sArr(), dArr()
Dim Dic As Object
Set Dic = CreateObject("Scripting.dictionary")
sArr = inputRange.Value
ReDim dArr(1 To UBound(sArr), 1 To 3)
For i = 1 To UBound(sArr)
If Not Dic.exists(sArr(i, 1)) Then
k = k + 1
Dic(sArr(i, 1)) = k
tong = tong + sArr(i, 3)
End If
Next i
congdoncachxa = tong
Set Dic = Nothing
End Function
 
1 nốt nhạc em trai

tong = tong + sArr(i, 3)
Thế nếu cột số lượng cần cộng (arr(i,3)) không phải là cột 3 trong mảng Arr mà là 1 số nào đó (4,10,50,....) thì làm sao?Cứ mỗi lần mở rộng mảng Arr (tức là số cột cần cộng dồn có thể không cố định ) lại phải vào VBE để sửa lại số cột arr(i,3) thành Arr(i,....) cho đúng ý định thì có còn gọi là "một nốt nhạc" không?
A
1​
A
2​
B
3​
C
4​
A
5​
E
6​
C
7​
G
8​
D
9​
E
10​
G
11​
Hoặc:
A
1​
A
2​
B
3​
C
4​
A
5​
E
6​
C
7​
G
8​
D
9​
E
10​
G
11​
 
Anh bố thí cúng dường code cho mầy nha Nhóc con. Mầy nên thách đố các người khác , đừng nến thách đố GIáo Sư Nhé
View attachment 300253

Mã:
Function congdoncachxa(inputRange As Range) As Long
Dim i As Long, k As Long, tong As Double
Dim sArr(), dArr()
Dim Dic As Object
Set Dic = CreateObject("Scripting.dictionary")
congdoncachxa = inputRange.Columns.Count
sArr = inputRange.Value
ReDim dArr(1 To UBound(sArr), 1 To congdoncachxa)
For i = 1 To UBound(sArr)
If Not Dic.exists(sArr(i, 1)) Then
k = k + 1
Dic(sArr(i, 1)) = k
tong = tong + sArr(i, congdoncachxa)
End If
Next i
congdoncachxa = tong
Set Dic = Nothing
End Function
Hàm này dùng 1 lần thì set object 1 lần + "xóa" object 1 lần. Nếu dùng cho 1 triệu dòng thì có nặng không vậy
 
Bạn xem thử , chắc là đúng ý rồi đó (Dùng VBA)
1713162516452.png
 

File đính kèm

  • sum stt.xlsm
    19.4 KB · Đọc: 6
Thử hàm như sau:
TINHTONG1:=SUMX (
SELECTCOLUMNS (
VALUES ( Table1[STT] ),
"STT", Table1[STT],
"First_Số Lượng", CALCULATE ( FIRSTNONBLANK ( Table1[Số Lượng], 1 ) )),
[First_Số Lượng])
 
Hề hề, chào các bác,
Hôm nay là kỷ niệm 1 tháng đình chỉ hoạt động trên diễn đàn (lần đình chỉ thứ 2).
Sau 1 tháng quay trở lại thì diễn đàn vẫn y hệt như 1 tháng trước, dường như khoảng thời gian là quá ít để thay đổi.
Hôm nay em xin phép hoạt động trở lại, và khi nào cần được đình chỉ, em xin phép tiếp lần 3.
Việc đầu tiên là oánh dấu cái thằng Toàn chết tiệt làm mình bị đình chỉ.
Trân trọng!!!

Mặc dù chưa biết bài này ứng dụng làm gì, nhưng cứ phải lướt qua để nắm nội dung tình hình thế nào.
 
Hề hề, chào các bác,
Hôm nay là kỷ niệm 1 tháng đình chỉ hoạt động trên diễn đàn (lần đình chỉ thứ 2).
Sau 1 tháng quay trở lại thì diễn đàn vẫn y hệt như 1 tháng trước, dường như khoảng thời gian là quá ít để thay đổi.
Hôm nay em xin phép hoạt động trở lại, và khi nào cần được đình chỉ, em xin phép tiếp lần 3.
Việc đầu tiên là oánh dấu cái thằng Toàn chết tiệt làm mình bị đình chỉ.
Trân trọng!!!

Mặc dù chưa biết bài này ứng dụng làm gì, nhưng cứ phải lướt qua để nắm nội dung tình hình thế nào.
Nghe nói thầy trò Đường Tam tạng phải qua 81 nạn mới thành chính quả, mình cố tí lên 82 lần cho đi vào sử sách đi bạn!! :p:p:p
 
Web KT
Back
Top Bottom