Semula gua sangka itu soal tes untuk calon programmer tempatmu, win ....
ealah ...
ternyata memang untuk kasus riil ...
:)
aksan kurdin
On 9/28/2010 3:45 PM, Erwin Sugiawan wrote:
Terima kasih semua.. udah ketemu ,Function di bawah adalah modifikasi dari function yang di buat oleh Bang Aksan.
Masalah :
1. Jumlah Order terkirim dalam 1 PO tidak boleh lebih dari 10.000 item
2. Jika jumlah Order di bagi oleh Split > 10000, maka perintah di abaikan, misalkan Jumlah Order=30000 jika di split 2 maka hasil
data(1)=10000 dan data(2) > 10000, hal ini tidak di ijinkan
3. Sesuai dengan petunjuk dari Bang Aksan, harus di mungkinkan hasil split mempunyai data yang sama, contoh
Jumlah Order 30000 di split 3 , maka data(1)=10000,data(2)=10000 dan data(3)=10000
Public Function SplitAngka(JmlOrder As Long, JmlSplit As Long)
ReDim arr(JmlSplit) As Long
Dim i As Integer
Dim maxNilai As Long
Dim MaxOrder As Long
Dim OrderRataRata As Long
Randomize
maxNilai = JmlOrder
MaxOrder = 10000
'Jika JmlOrder < 10k, maka MaxOrder mengikuti yang terkecil
If JmlOrder < MaxOrder Then MaxOrder = JmlOrder
OrderRataRata = (JmlOrder / JmlSplit)
If OrderRataRata > MaxOrder Then
MsgBox ("Order hasil Split harus lebih kecil dari 10 rb")
Exit Function
End If
If OrderRataRata = MaxOrder Then
For i = 0 To JmlSplit - 1
arr(i) = OrderRataRata
Next i
Else
For i = 0 To JmlSplit - 2
If maxNilai > MaxOrder Then
arr(i) = MaxOrder
Else
Do While True
arr(i) = CLng(Rnd() * (MaxOrder - (JmlSplit - 2) - 1)) + 1
If arr(i) > 0 And arr(i) * JmlSplit < 10000 Then Exit Do
Loop
End If
maxNilai = maxNilai - arr(i)
If maxNilai < MaxOrder Then MaxOrder = maxNilai
Next
arr(JmlSplit - 1) = maxNilai - arr(i)
End If
Dim runNilai As Long
runNilai = 0
For i = 0 To (JmlSplit - 1)
Debug.Print i + 1, arr(i)
runNilai = runNilai + arr(i)
Next
Debug.Print "total : " & runNilai
End Function
Best regard
Erwin Sugiawan
__._,_.___
No comments:
Post a Comment