Dùng Công Thức gì để giải quyết trường hợp này?

Liên hệ QC

royalcrystal

Thành viên mới
Tham gia
29/1/08
Bài viết
12
Được thích
1
Mình có sheet A nhu sau ngay/mã hàng/souong/price
A / 123 / 10 / 5
A / 456/ 10 / 7
B / 123/ 20 / 4

Sheet B Thì chỉ có như vậy mahang/soluong/price

yêu cầu là :
1- làm thế nào để khi mình nhập đữ liệu vào sheet A nó sẽ tự động chuyển sang sheet B ,
2- và phần mã hàng ở sheet B sẽ không bị lặp lại như ỏ sheet A , ( như trên thấy, khi sang sheet B minh muốn mã hang 123 chỉ hiện 1 lần và sồ lượng là 20)
3- ở phần Price ở sheet B có thể cũng chỉ hiện 1 lần giá của 1 mã hang, nhưng là giá trung bình .

Ai biết chỉ dùm, làm ơn có file ví dụ minh họa, vì minh mới làm quen vói Excel ! cám ơn nhiều%#^#$
 
Dùng công thức này:
Tổng sl = Sumif(sl)
Trung bình số học = Sumif(sl) / Countif(sl)
Bình quân gia quyền = Sum(if(MH, sl * dg) /sumif(sl)
 
Lần chỉnh sửa cuối:
Không cần thêm gì ở sheet A và B cả
Xem mẫu
 

File đính kèm

royalcrystal đã viết:
Mình có sheet A nhu sau ngay/mã hàng/souong/price
A / 123 / 10 / 5
A / 456/ 10 / 7
B / 123/ 20 / 4

Ai biết chỉ dùm, làm ơn có file ví dụ minh họa, vì minh mới làm quen vói Excel ! cám ơn nhiều%#^#$

Ở các trường hợp này tôi thích Pivot Table vì làm bằng công thức thì chưa ra hic hic..., bạn xem file xem đúng cái bạn cần không nhé.

Mong các AC làm bằng công thức để học hỏi.Thanks
 

File đính kèm

Còn dư âm Tết nên làm thấy thế nào, còn VBA thì quên hết.
Bạn sẽ thử file có đúng ý không? Cải tiến sau.
 
Lần chỉnh sửa cuối:
royalcrystal đã viết:
2- và phần mã hàng ở sheet B sẽ không bị lặp lại như ỏ sheet A , ( như trên thấy, khi sang sheet B minh muốn mã hang 123 chỉ hiện 1 lần và sồ lượng là 20)

Bạn Royalcrystal cho hỏi nhé, ở yêu cầu trên là chỉ lấy số lượng Max cho các mã hàng đúng không. Nếu đúng như thế sao lại bàn tới cái Sumif nhỉ.
 
Bằng VBA đây, xin mời

Nếu xuất hiện lần đầu thì chép;
Các lần khác: tính lại 2 thông số
PHP:
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 If Not Intersect(Target, Range("B2:B9999")) Is Nothing Then
    Dim MaHg As String: Dim Rng1 As Range
    Dim pRice As Double, SoLg As Double
    Dim lRow As Long, lW As Long, iDem As Long
    
    With Target
        If .Interior.ColorIndex <> 35 Then
            MaHg = .Value:              .Interior.ColorIndex = 35
            If .Row = 2 Then
                CopyRecord .Resize(1, 3), Sheets("S2").Range("A" & _
                    Sheets("S2").Range("A65432").End(xlUp).Row + 1)
            Else
                lRow = Range("B65432").End(xlUp).Row
                For lW = 2 To lRow
                    Application.ScreenUpdating = False
                    If Cells(lW, 2) = MaHg Then
                        iDem = 1 + iDem
                        With Cells(lW, 2)
                            SoLg = SoLg + .Offset(, 1)
                            pRice = pRice + .Offset(, 2)
                            If iDem = 1 Then Set Rng1 = .Resize(1, 3)
                        End With
                    End If
                Next lW
        End If:                         End If
    End With
 End If
 If iDem = 1 Then
    CopyRecord Rng1, Sheets("S2").Range("A" & _
        Sheets("S2").Range("A65432").End(xlUp).Row + 1)
 Else
    Sheets("S2").Select
    lRow = Sheets("S2").Range("A65432").End(xlUp).Row
    For lW = 2 To lRow
        If Sheets("S2").Cells(lW, 1) = MaHg Then
            With Sheets("S2").Cells(lW, 1)
                .Offset(, 1) = SoLg
                .Offset(, 2) = pRice / iDem
            End With
        End If
    Next lW
 End If
End Sub
Mã:
[b]

Sub CopyRecord(Rng As Range, DesRng As Range)[/b]
 Rng.Copy Destination:=DesRng[b]
End Sub [/b]
 

File đính kèm

ptm0412 đã viết:
RoyalCrystal ơi!
Rốt cuộc là tính tổng như mình, tính Max như Viendo, hay lấy dòng cuối như ThuNghi?

cám ơn bạn. vấn đề thứ 3 đã giải quết xong rất la ok. tốt hơn cả mình mong đợi,@$@!^% cám ơn bạn nhiều ! còn mục thứ 1 và 2 chưa được . bởi vì mình vẫn phải nhập dữ liệu vào sheet B !**~** mà mục MH ở sheet A thì mình có khoảng 5000 dòng với khoảng 800-850 MH giống nhau!! mà nhiều như vậy mà nhập bang tay dễ bị sai lam' . Nếu như dùng sumif thi sẽ lọc được dữ liệu, nhưng phai nhập băng tay vào sheet B, còn như A1 =+C1 thì nó sẽ tự dộng nhảy, nhưng lại không lọc được dữ liệu !! có cách nào để kết hợp hai cách này với nhau không??
Cám ơn ThuNghi, Viendo đã giúp mình, nhưng có lẽ các bạn chưa hiểu được ý mình. nhưng dù sao cung cám ơn tất cả các bạn !!cám ơn đại gia đình GPE@$@!^%
 
SA_DQ đã viết:
Nếu xuất hiện lần đầu thì chép;
Các lần khác: tính lại 2 thông số
PHP:
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 If Not Intersect(Target, Range("B2:B9999")) Is Nothing Then
    Dim MaHg As String: Dim Rng1 As Range
    Dim pRice As Double, SoLg As Double
    Dim lRow As Long, lW As Long, iDem As Long
    
    With Target
        If .Interior.ColorIndex <> 35 Then
            MaHg = .Value:              .Interior.ColorIndex = 35
            If .Row = 2 Then
                CopyRecord .Resize(1, 3), Sheets("S2").Range("A" & _
                    Sheets("S2").Range("A65432").End(xlUp).Row + 1)
            Else
                lRow = Range("B65432").End(xlUp).Row
                For lW = 2 To lRow
                    Application.ScreenUpdating = False
                    If Cells(lW, 2) = MaHg Then
                        iDem = 1 + iDem
                        With Cells(lW, 2)
                            SoLg = SoLg + .Offset(, 1)
                            pRice = pRice + .Offset(, 2)
                            If iDem = 1 Then Set Rng1 = .Resize(1, 3)
                        End With
                    End If
                Next lW
        End If:                         End If
    End With
 End If
 If iDem = 1 Then
    CopyRecord Rng1, Sheets("S2").Range("A" & _
        Sheets("S2").Range("A65432").End(xlUp).Row + 1)
 Else
    Sheets("S2").Select
    lRow = Sheets("S2").Range("A65432").End(xlUp).Row
    For lW = 2 To lRow
        If Sheets("S2").Cells(lW, 1) = MaHg Then
            With Sheets("S2").Cells(lW, 1)
                .Offset(, 1) = SoLg
                .Offset(, 2) = pRice / iDem
            End With
        End If
    Next lW
 End If
End Sub
Mã:
[B]

Sub CopyRecord(Rng As Range, DesRng As Range)[/B]
 Rng.Copy Destination:=DesRng[B]
End Sub [/B]
ái chà, cám ơn bác SA nhiều, nhưng về macro hay script là em chịu rồi, nhìn thấy cái của bác như vịt nghe sấm :D những cái bác viết tren, nếu muốn đưa vào bảng tính của em thì làm cách nào, mong bác chỉ cạn kẽ hơn. cám ơn nhiều
 
Bạn hãy tải file đính kèm & xem!

cám ơn bác SA nhiều, macro là em chịu rồi, . . . .Những cái bác viết tren, nếu muốn đưa vào bảng tính của em thì làm cách nào, mong bác chỉ cạn kẽ hơn. cám ơn nhiều
Muốn xem được thì phải chuột vô các sheetName & chọn dòng cuối ( nó có tên là View Code);
Bạn thực thi với lần lượt từng SheetName đến khi thấy các Mcr (macro) mình trích trên;
Mcr ở Sheets nào thì thử nhập thêm vô sheets đó từng record & nhấp đúp vô ô 'B' vừa nhập để xem Mcr làm việc NTN. &&&%$R
CopyOrReCal.jpg
(Nếu muốn dịch & hiểu nội dung thì qua trung tâm giải thích Code. Mình hay sẽ có người giúp tiếp bạn!)
 
Lần chỉnh sửa cuối:
ở sheet A thì mình có khoảng 5000 dòng với khoảng 800-850 MH giống nhau!!
bạn tham khảo bài viết trên GPE về lọc lấy dữ liệu không trùng, bạn sẽ có 1 danh mục 850 dòng trong sheet B, còn sheet A dù bao nhiêu dòng cũng sẽ sang sheet B nếu như bên B đã có.
Thí du như dùng advanced Filter, unique value sheetA, copy sang sheet B.
Khi phát sinh mặt hàng mới cần cập nhật qua sheetB
 
Web KT

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

Back
Top Bottom