Văn Toàn 1996
Thành viên hoạt động
- Tham gia
- 5/6/23
- Bài viết
- 102
- Được thích
- 22
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ả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ínhCô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
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ụ= SUMPRODUCT(--( C4:C12 <> C3:C11 ) ,D4: D12 )
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
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 đó.Mình xin góp Vui mã VBA này đúng theo yêu cầu
Gửi bạn 1 nốt nhạc . Công thức trên Excel ví dụ = congdon(C5 : 700) enter là lụmCá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 đó.
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à.Trật lất
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ô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?
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ì .....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
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 traiNế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 1A 2B 3C 4D 5B 6A 7E 8C 9D 10G 11
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
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?1 nốt nhạc em trai
tong = tong + sArr(i, 3)
A | 1 | ||
A | 2 | ||
B | 3 | ||
C | 4 | ||
A | 5 | ||
E | 6 | ||
C | 7 | ||
G | 8 | ||
D | 9 | ||
E | 10 | ||
G | 11 |
A | 1 | |||
A | 2 | |||
B | 3 | |||
C | 4 | |||
A | 5 | |||
E | 6 | |||
C | 7 | |||
G | 8 | |||
D | 9 | |||
E | 10 | |||
G | 11 |
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ậyAnh 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
TINHTONG1:=SUMX (
SELECTCOLUMNS (
VALUES ( Table1[STT] ),
"STT", Table1[STT],
"First_Số Lượng", CALCULATE ( FIRSTNONBLANK ( Table1[Số Lượng], 1 ) )),
[First_Số Lượng])
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!!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.
Tạm gọi là đầy tháng nhỉ.Hôm nay là kỷ niệm 1 tháng đình chỉ hoạt động trên diễn đàn
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
View attachment 300227