giúp em code lọc báo cáo bán hàng hàng tháng của năm (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

quoc nhat

Thành viên tiêu biểu
Tham gia
8/3/12
Bài viết
567
Được thích
43
Nghề nghiệp
cán bộ ngành y tế
Chào các anh chị. Chúc các anh chị ngày mới tốt lành
EM xin nhờ các anh chị viết giúp đoạn code lọc báo cáo bán hàng từng tháng trong năm:
cộng tổng số liệu bán hàng trong tháng cho vào 1 dòng tương ứng với 1 tháng
mỗi tháng là 1 dòng.
Qua năm khác cũng như vậy
Trong file giả định em cũng thử dùng For - Next để tổng hợp nhưng nó ra kết quả là một danh sách dài không như ý muốn
Em cũng tham khảo cách dùng hàm Sumifs với 2 điều kiện tháng và năm nhưng do dùng Excel 97 nên báo lỗi #Name?.
Kiến thức về Excel còn hạn chế nên xin nhờ các anh chị bỏ chút thời gian giúp đỡ em với ạ
Em cảm ơn nhiều!
Đây là Link file của em:
http://www.mediafire.com/download/iyzi8idifs1k46d/bao_cao.xls
Các anh chị xem giúp em với
Cuối năm rồi mà chưa tổng hợp được báo cáo thì nguy mất
 
Tôi chỉ sửa lại code của bạn 1 tí thôi. Mục đích là khi tháng khác nhau thì mới thêm vào Res.

Mã:
For I = 1 To UBound(Arr, 1)
    tmp = DateSerial(Right(Arr(I, 1), 4), Mid(Arr(I, 1), 4, 2), Left(Arr(I, 1), 2))
[COLOR=#ff0000]    If I > 1 Then: tmp2 = DateSerial(Right(Arr(I - 1, 1), 4), Mid(Arr(I - 1, 1), 4, 2), Left(Arr(I - 1, 1), 2))
[/COLOR]    If tmp >= fDate And tmp <= tDate Then
[COLOR=#ff0000]        If tmp <> tmp2 Then
[/COLOR]            K = K + 1
            Res(K, 1) = K
            Res(K, 2) = Right(Arr(I, 1), 4)
            Res(K, 3) = Mid(Arr(I, 1), 4, 2)
            Res(K, 4) = Arr(I, 7)   'slban
            Res(K, 5) = Arr(I, 9)   'doanhthu
            Res(K, 6) = Arr(I, 10)  'giavon
            Res(K, 7) = (Arr(I, 8) * Arr(I, 7)) - (Arr(I, 10) * Arr(I, 7)) 'lai/lo
[COLOR=#ff0000]        End If
[/COLOR]
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Tôi chỉ sửa lại code của bạn 1 tí thôi. Mục đích là khi tháng khác nhau thì mới thêm vào Res.

Mã:
For I = 1 To UBound(Arr, 1)
    tmp = DateSerial(Right(Arr(I, 1), 4), Mid(Arr(I, 1), 4, 2), Left(Arr(I, 1), 2))
[COLOR=#ff0000]    If I > 1 Then: tmp2 = DateSerial(Right(Arr(I - 1, 1), 4), Mid(Arr(I - 1, 1), 4, 2), Left(Arr(I - 1, 1), 2))
[/COLOR]    If tmp >= fDate And tmp <= tDate Then
[COLOR=#ff0000]        If tmp <> tmp2 Then
[/COLOR]            K = K + 1
            Res(K, 1) = K
            Res(K, 2) = Right(Arr(I, 1), 4)
            Res(K, 3) = Mid(Arr(I, 1), 4, 2)
            Res(K, 4) = Arr(I, 7)   'slban
            Res(K, 5) = Arr(I, 9)   'doanhthu
            Res(K, 6) = Arr(I, 10)  'giavon
            Res(K, 7) = (Arr(I, 8) * Arr(I, 7)) - (Arr(I, 10) * Arr(I, 7)) 'lai/lo
[COLOR=#ff0000]        End If
[/COLOR]
Dear dovanhoc84
chia tháng và năm thì đúng rồi nhưng lại chưa đúng ý mình
có nghĩa là căn cứ vào ngày xuất hàng trong tháng cộng tổng các mục (số lượng , doanh thu, giá vốn, lãi/lỗ ) các ngày trong tháng sau đó tổng hợp báo cáo cả tháng đó bán được tổng số lượng là bao nhiêu, tổng doanh thu là bao nhiêu, tổng giá vốn, lãi/lỗ của cả tháng là bao nhiêu (1 tháng 1 dòng tổng) ở sheet báo cáo
ở đây bạn chỉ lấy tổng một ngày trong tháng thôi
Bạn vui lòng xem lại giúp mình được không?
 
Upvote 0
Dear dovanhoc84
chia tháng và năm thì đúng rồi nhưng lại chưa đúng ý mình
có nghĩa là căn cứ vào ngày xuất hàng trong tháng cộng tổng các mục (số lượng , doanh thu, giá vốn, lãi/lỗ ) các ngày trong tháng sau đó tổng hợp báo cáo cả tháng đó bán được tổng số lượng là bao nhiêu, tổng doanh thu là bao nhiêu, tổng giá vốn, lãi/lỗ của cả tháng là bao nhiêu (1 tháng 1 dòng tổng) ở sheet báo cáo
ở đây bạn chỉ lấy tổng một ngày trong tháng thôi
Bạn vui lòng xem lại giúp mình được không?

Quên mất không cộng vào :D

Hình như vẫn không ổn....
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Dear dovanhoc84
chia tháng và năm thì đúng rồi nhưng lại chưa đúng ý mình
có nghĩa là căn cứ vào ngày xuất hàng trong tháng cộng tổng các mục (số lượng , doanh thu, giá vốn, lãi/lỗ ) các ngày trong tháng sau đó tổng hợp báo cáo cả tháng đó bán được tổng số lượng là bao nhiêu, tổng doanh thu là bao nhiêu, tổng giá vốn, lãi/lỗ của cả tháng là bao nhiêu (1 tháng 1 dòng tổng) ở sheet báo cáo
ở đây bạn chỉ lấy tổng một ngày trong tháng thôi
Bạn vui lòng xem lại giúp mình được không?

- Ngày tháng năm toàn kiểu Text, nên không tính theo ngày tháng năm. Nếu muốn thì bạn tự thêm vào trong Sub.
- 3 cột Doanh thu, Giá vốn, Giá xuất bên sheet "xuat" sao ngộ quá.
Như dòng 9: SL 10 - Giá Xuất 2000 - Doanh thu 2000 là sao, không giống như dòng 3.
- Bảo tính tổng cột Giá xuất bên sheet "xuat" là sao? có nhân với SL từng dòng không?
Làm chuyên môn của mình mà giải thích không rõ. Nếu nhân với cột SL thì mua bán làm gì khi kết quả là "lỗ nặng" như trong file.
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long,  K As Long
With Sheets("xuat")
    sArr = .Range("B2", .Range("B65536").End(xlUp)).Resize(, 10).Value
End With
ReDim dArr(1 To UBound(sArr, 1), 1 To 7)
For I = 2 To UBound(sArr, 1)
    If Right(sArr(I, 1), 7) <> Right(sArr(I - 1, 1), 7) Then K = K + 1
        dArr(K, 1) = K
        dArr(K, 2) = Right(sArr(I, 1), 4)
        dArr(K, 3) = Mid(sArr(I, 1), 4, 2)
        dArr(K, 4) = dArr(K, 4) + sArr(I, 7)
        dArr(K, 5) = dArr(K, 5) + sArr(I, 9)
        dArr(K, 6) = dArr(K, 6) + Val(sArr(I, 10)) * sArr(I, 7) 'Nhân với cột Số Lượng'
Next I
For I = 1 To K
    dArr(I, 7) = dArr(I, 5) - dArr(I, 6)
Next I
With Sheets("BaoCao")
    .Range("B7:I100").ClearContents
    .Range("B7:I100").Borders.LineStyle = 0
    .Range("B7").Resize(K, 7) = dArr
    .Range("B7").Resize(K, 8).Borders.LineStyle = 1
End With
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
- Ngày tháng năm toàn kiểu Text, nên không tính theo ngày tháng năm. Nếu muốn thì bạn tự thêm vào trong Sub.
- 3 cột Doanh thu, Giá vốn, Giá xuất bên sheet "xuat" sao ngộ quá.
Như dòng 9: SL 10 - Giá Xuất 2000 - Doanh thu 2000 là sao, không giống như dòng 3.
- Bảo tính tổng cột Giá xuất bên sheet "xuat" là sao? có nhân với SL từng dòng không?
Làm chuyên môn của mình mà giải thích không rõ. Nếu nhân với cột SL thì mua bán làm gì khi kết quả là "lỗ nặng" như trong file.
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long,  K As Long
With Sheets("xuat")
    sArr = .Range("B2", .Range("B65536").End(xlUp)).Resize(, 10).Value
End With
ReDim dArr(1 To UBound(sArr, 1), 1 To 7)
For I = 2 To UBound(sArr, 1)
    If Right(sArr(I, 1), 7) <> Right(sArr(I - 1, 1), 7) Then K = K + 1
        dArr(K, 1) = K
        dArr(K, 2) = Right(sArr(I, 1), 4)
        dArr(K, 3) = Mid(sArr(I, 1), 4, 2)
        dArr(K, 4) = dArr(K, 4) + sArr(I, 7)
        dArr(K, 5) = dArr(K, 5) + sArr(I, 9)
        dArr(K, 6) = dArr(K, 6) + Val(sArr(I, 10)) * sArr(I, 7) 'Nhân với cột Số Lượng'
Next I
For I = 1 To K
    dArr(I, 7) = dArr(I, 5) - dArr(I, 6)
Next I
With Sheets("BaoCao")
    .Range("B7:I100").ClearContents
    .Range("B7:I100").Borders.LineStyle = 0
    .Range("B7").Resize(K, 7) = dArr
    .Range("B7").Resize(K, 8).Borders.LineStyle = 1
End With
End Sub
Hì! Tại vì đây là file giả định nên khi kéo Fill em không để ý
Để em xem lại
Cảm ơn anh nhiều!
 
Upvote 0
Web KT

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

Back
Top Bottom