Thay đổi số liệu theo điều kiện trong excel

Liên hệ QC

quick87

(/ội...
Tham gia
8/4/08
Bài viết
371
Được thích
351
Giới tính
Nam
Em có 1 vướng mắc nhỏ mong các thầy và các anh chị giúp đỡ.

" Làm thế nào để excel tự chỉnh Doanh số của đơn vị này sang đơn vị khác theo điều kiện giá vốn làm căn cứ ( Chi tiết theo file đính kèm ) ? "

Mong nhận được sự giúp đỡ của các Thầy và các anh chị !
Em xin cảm ơn !
 

File đính kèm

  • Thay doi Doanh so theo gia von.xls
    84 KB · Đọc: 19
1. Bạn nên xóa dữ liệu của công ty thay vào đó là dữ liệu nào đó giả định, Ví dụ tên cty, mã số thuế..
Thông tin của cty bạn gởi công cộng thế có vđ gì không?

2. Điều kiện là gỉ để chuyển sang cái bạn muốn, bạn đưa số đã rồi ai mà biết bạn muốn gì?
 
Upvote 0
Em cảm ơn anh đã hỗ trợ.
Số liệu trên của em chỉ là giả định, không phải số liệu của công ty anh ạ nên không có vấn đề gì anh!

Điều kiện để chuyển sang cái em muốn là:
Em muốn chia bớt Doanh số của đơn vị này sang đơn vị khác, sao cho Doanh số của các đơn vị nó không còn nhỏ hơn cái giá vốn !
Thay vì em làm thủ công bằng pivot table em muốn sử dụng macro để tự động thao tác việc chuyển Doanh số của đơn vị này qua đơn vị khác đó anh !
Mong tiếp tục nhận được sự giúp đỡ của anh, các Thầy và các anh chị ạ !

Em xin cảm ơn !
 
Lần chỉnh sửa cuối:
Upvote 0
Mong nhận được sự giúp đỡ của các anh chị thật nhiều !
 
Upvote 0
Làm thế nào để up bài mới lên được vậy?
em chẳng thấy chỗ nào cả.
em là thành viên mới mà.
 
Upvote 0
Mong nhận được sự giúp đỡ của các anh chị thật nhiều !
Kết quả tính toán trong file của bạn rất mơ hồ cho nên làm khó cho các thành viên muốn giúp bạn.
1. Dựa vào nguyên tắc nào để điều chỉnh "Doanh số" với "Giá vốn"?
2. Tỉ trọng giữa 2 yếu tố này có tham gia vào việc điều chỉnh hay không?
Ví dụ: tỉ lệ giữa DS với GV của cty A là d/g với d>g, khi điều chỉnh thì có dùng tỉ số này để điều chỉnh không?
...
Bạn nên mô tả rõ ý định của bạn khi muốn điều chỉnh, vì đây là bài toán phân hoạch lại tập số liệu dựa vào những điều kiện cho trước mà trong file của bạn lại không chỉ ra các điều kiện này.
 
Upvote 0
Kết quả tính toán trong file của bạn rất mơ hồ cho nên làm khó cho các thành viên muốn giúp bạn.
1. Dựa vào nguyên tắc nào để điều chỉnh "Doanh số" với "Giá vốn"?
2. Tỉ trọng giữa 2 yếu tố này có tham gia vào việc điều chỉnh hay không?
Ví dụ: tỉ lệ giữa DS với GV của cty A là d/g với d>g, khi điều chỉnh thì có dùng tỉ số này để điều chỉnh không?
...
Bạn nên mô tả rõ ý định của bạn khi muốn điều chỉnh, vì đây là bài toán phân hoạch lại tập số liệu dựa vào những điều kiện cho trước mà trong file của bạn lại không chỉ ra các điều kiện này.
Dạ, em cảm ơn anh !
Trong các câu hỏi của anh:
1. Dựa vào nguyên tắc nào để điều chỉnh "Doanh số" với "Giá vốn"?
Giá vốn là chỉ tiêu cố định không được điều chỉnh.
Những đơn vị có Doanh số nhỏ hơn giá vốn em sẽ lấy Doanh số của đơn vị khác san qua ( hóa đơn của đơn vị có doanh số lớn sẽ được chỉnh thành hóa đơn của đơn vị có Doanh số đang nhỏ hơn giá vốn ).

Ví dụ như:
- Doanh số của Bình Định đang nhỏ hơn giá vốn em sẽ lấy Doanh số của đơn vị An Giang chỉnh thành Doanh số của Bình Định ( số hd 15947, 29949 ).

Mong anh chị giúp đỡ thêm !
Em xin cảm ơn !
 
Upvote 0
Hiện nay tôi đã viết xong đoạn chương trình điều chỉnh tự động các hóa đơn về các đơn vị có Chênh_Lệch âm theo nguyên tắc sau:
1. Lọc ra các phiếu có thể điều chỉnh (đảm bảo giá trị của phiếu nhỏ hơn mức chênh lệch của đơn vị tương ứng)
2. Ưu tiên xử lý các đơn vị có mức chệch lệch âm từ lớn đên bé
3. Chọn ra 1 phiếu của đơn vị có lệch dương gần với mức lệch âm nhất có thể
4. Chuyển phiếu cho đơn vị lệch âm
Với dữ liệu mẫu của bạn, chương trình tính toán cũng khá nhanh.
Nhưng... tất nhiên, để chương trình có thể thực hiện được, tôi đã lập ra một mô hình bài toán trên cơ sở dữ liệu của bạn, nếu bạn còn quan tâm đến bài toán này thì trả lời ở đây.
 
Upvote 0
Hiện nay tôi đã viết xong đoạn chương trình điều chỉnh tự động các hóa đơn về các đơn vị có Chênh_Lệch âm theo nguyên tắc sau:
1. Lọc ra các phiếu có thể điều chỉnh (đảm bảo giá trị của phiếu nhỏ hơn mức chênh lệch của đơn vị tương ứng)
2. Ưu tiên xử lý các đơn vị có mức chệch lệch âm từ lớn đên bé
3. Chọn ra 1 phiếu của đơn vị có lệch dương gần với mức lệch âm nhất có thể
4. Chuyển phiếu cho đơn vị lệch âm
Với dữ liệu mẫu của bạn, chương trình tính toán cũng khá nhanh.
Nhưng... tất nhiên, để chương trình có thể thực hiện được, tôi đã lập ra một mô hình bài toán trên cơ sở dữ liệu của bạn, nếu bạn còn quan tâm đến bài toán này thì trả lời ở đây.

Dạ, em cảm ơn anh !

Thực sự em rất băn khoăn về công việc này vì hàng tháng em đều phải thực hiện công việc này trên cơ sở dữ liệu khá nhiều mà chỉ làm thủ công nên rất mất thời gian ( do kiến thức VBA của em còn yếu ).
Nếu được, anh có thể cho em xin đoạn code đó được không ạ ?
Mong nhận được hồi âm của anh và các anh chị !

Em xin cảm ơn !
 
Upvote 0
Trước hết tôi mô tả file giả lập, bạn có thể xem trong đính kèm, có gì vướng mắc sẽ trao đổi tiếp
Trong file gồm có:
Trước hết để đơn giản hóa chương trình, tôi gán cho mỗi đơn vị một số thứ tự, ví dụ: An Giang là 1; Quảng Trị là 17
1. Tạo sheet GVON, chứa thông tin về giá vôn của 17 đơn vị
2. Tạo sheet DonVi chứa thông tin về các hóa đơn của mỗi một đơn vị
3. Trên cơ sở 2 sheet này, tôi tạo sheet DuLieu và sẽ thực hiện chương trình điều chỉnh trong sheet này.
Có nút lệnh, bạn click để thực hiện.
Chúc thành công!
Mã chương trình:
PHP:
Private Sub XuLy_Click()
Dim rA1 As Range, rA2 As Range, rR As Range, rC As Range
Dim i As Long, k As Long, J As Long, iR As Long, iC As Long
Dim aSmall As Long, pSmall As Long, DKLap As Boolean
Dim aR(), aC()
With Application
    .ScreenUpdating = False
    Set rA1 = Me.Range(Me.Name)
        iR = rA1.Rows.Count
        iC = rA1.Columns.Count
        pSmall = rA1(1, 2)
        aSmall = -rA1(2, 2)
    DKLap = (rA1(3, 2) > 0)
    If Not DKLap Then GoTo KetThuc
    ReDim aR(1 To iR, 1 To 2)
    aR = rA1.Offset(4, 0).Resize(iR - 4, 2)
   
    ReDim aC(1 To 2, 1 To iC)
    aC = rA1.Offset(, 2).Resize(2, iC - 2)
   
    'Trich ra nhung phieu co the chuyen '
    For i = 1 To iR - 4
        If (aR(i, 2) > aC(2, aR(i, 1))) Then
            aR(i, 2) = 0
        End If
        aR(i, 1) = i
    Next
    Set rA2 = Sheet4.Cells.Resize(iR - 4, 2)
    rA2 = aR
   
    Do While (rA1(3, 2) > 0) 'Dieu kien lap con gia tri am'
        rA2.Sort key1:=Sheet4.Range("B1"), Header:=xlNo
        k = .WorksheetFunction.Match(aSmall, rA2.Offset(, 1).Resize(, 1), 1)
        If rA2(k, 2) = 0 Then k = k + 1
        If k > iR - 4 Then GoTo KetThuc
        rA2(k, 2) = 0
        k = rA2(k, 1)
        rA1(4 + k, 1) = pSmall
        pSmall = rA1(1, 2)
        aSmall = -rA1(2, 2)
    Loop
KetThuc:
    MsgBox "Het kha nang!"
    Set rA1 = Nothing
    Set rA2 = Nothing
.ScreenUpdating = True
End With
End Sub
 

File đính kèm

  • DieuChinhDThu.zip
    32.7 KB · Đọc: 10
Lần chỉnh sửa cuối:
Upvote 0
Xin chân thành cảm ơn anh thật nhiều !
 
Upvote 0
Tôi đã giả lập file theo như số liệu bạn mô tả, bạn chỉ cần copy dữ liệu vào các vị trí giả lập thì sẽ thực hiện được
 

File đính kèm

  • DieuChinhDThu.zip
    262.2 KB · Đọc: 6
Upvote 0
Web KT
Back
Top Bottom