Bạn tham khảo:Chào các anh chị,
Em nhờ các anh chị viết giúp em cod để khi nhập mã hàng thì tự động tính tổng giá trị theo mã hàng thay cho công thức như file đính èm.
Em cảm ơn ạ.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastRow As Long
lastRow = Range("B40").End(xlUp).Row
If Target.Column = 2 And Target.Row >= 4 And Target.Row <= lastRow Then
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
Dim i As Long
For i = 4 To lastRow
If Not dict.exists(Range("B" & i).Value) Then
dict.Add Range("B" & i).Value, Range("C" & i).Value
Else
dict.Item(Range("B" & i).Value) = dict.Item(Range("B" & i).Value) + Range("C" & i).Value
End If
Next i
Range("D" & Target.Row).Value = dict.Item(Range("B" & Target.Row).Value)
End If
End Sub
Nhờ bạn xem lại giúp mình khi thay đổi mã đã nhập trước đó, hoặc giá trị cột C thay đổi thì các mã hàng có cùng mã cũng được tính tổng lại ( số liệu thay đổi theo). Cảm ơn bạn nhiềuBạn tham khảo:
Mã:Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim lastRow As Long lastRow = Range("B40").End(xlUp).Row If Target.Column = 2 And Target.Row >= 4 And Target.Row <= lastRow Then Dim dict As Object Set dict = CreateObject("Scripting.Dictionary") Dim i As Long For i = 4 To lastRow If Not dict.exists(Range("B" & i).Value) Then dict.Add Range("B" & i).Value, Range("C" & i).Value Else dict.Item(Range("B" & i).Value) = dict.Item(Range("B" & i).Value) + Range("C" & i).Value End If Next i Range("D" & Target.Row).Value = dict.Item(Range("B" & Target.Row).Value) End If End Sub
Đúng rồi bạn, mã hàng thay đổi và giá trị cột C thay đổi thì tổng tiền theo mã ( cột D) cũng thay đổi theo cho tất cả các dòng có cùng mã thay đổi.Thói thường nhập liệu (còn sửa lại là chuyện khác à nha), ta phải nhập mã hàng cụ thể nào đó trước; Sau đó mới tính đến việc ghi nhập số tiên (giá) của nó.
Vậy nên chăng ta với sự kiện tính tổng liên quan đến mã hàng nên gắn với cột 'C' (cột ghi số tiền của mã hàng); Tác giả bài đăng nghỉ sao?
Bạn tham khảo:Nhờ bạn xem lại giúp mình khi thay đổi mã đã nhập trước đó, hoặc giá trị cột C thay đổi thì các mã hàng có cùng mã cũng được tính tổng lại ( số liệu thay đổi theo). Cảm ơn bạn nhiều
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastRow As Long
lastRow = Range("B1000").End(xlUp).Row
If (Target.Column = 2 Or Target.Column = 3) And Target.Row >= 4 And _
Target.Row <= lastRow Then
tinh lastRow
End If
End Sub
Private Sub tinh(ByVal lastRow As Long, Optional ByVal fR As Integer = 4)
If lastRow < fR Then Exit Sub
Dim dict As Object
Dim ma As Variant, tien As Variant, var As Variant
Dim i As Long
Set dict = CreateObject("Scripting.Dictionary")
ma = Range("B" & fR & ":C" & lastRow).Value
For i = LBound(ma, 1) To UBound(ma, 1)
var = ma(i, 1)
tien = ma(i, 2)
If IsNumeric(tien) Then
If Not dict.exists(var) Then
dict.Add var, tien
Else
dict.Item(var) = dict.Item(var) + tien
End If
End If
Next i
tien = Range("D" & fR & ":D" & lastRow).Value
For i = LBound(ma, 1) To UBound(ma, 1)
var = ma(i, 1)
tien(i, 1) = dict.Item(var)
Next i
Range("D" & fR & ":D" & lastRow).Value = tien
End Sub
'Code' nói chung nó không chỉ để giải quyết vấn đề đưa ra kết quả; theo yêu cầuCông thức ra OK rồi sao còn cần code nhỉ?
Máy cùi bắp của mình mỗi khi dùng Table nó cứ cà giựtGPE có tật ghiền code. Cứ nghe đến "nhơ code" là mừng như bắt được vàng.
Cái này chỉ viêc cho bảng vào một Table. Gõ thêm gì nó tự động chỉnh nấy. Mắc mớ gì phải code?
Thực yế thì Table chỉ là một trong những hướng đi tương lai của Excel.Máy cùi bắp của mình mỗi khi dùng Table nó cứ cà giựt