Pak Kid. mengenai loop nya : memang ada 3 .
1. untuk = 6 colomn 2. untuk = 23 baris 3. untuk 3485 baris kalau kriteriaanya memang jadi banyak . disebabkan kalau dijadikan satu --- hitunganannya jadi kacau . hanya untuk yg ini saja . --- mungkin di sebabkan ada randbetween . hasil nya untuk ---> di pakai vloopup ----> hasil dari Vlookup -- nya benar ----------- tapi bila hasil itu digunakan untuk menghitung : tgl kedatangannya. ---> ini yg kacau balau. sudah saya utak atik --- disatukan ----------- dipisahkan --dibawahnya ---> juga gagal dan anehnya setelah di letakan dibagian paling akhir --- baru bisa benar ----> nga bisa menjelaskan . mengapa bisa begitu ? mungkin memang sulit . kalau randbetween --- dimasukan kedalam VBA . cuma saya membayangkan . randbetween ini seakan akan seperti dadu yg sedang berguling guling ---- lalu di paksa hasil nya ---> dengan cara menutup dadu itu dengan tangan . na kalau saya masukan dulu randbetween -- terlebih dulu jauh lebih mudah --- tapi sudah menjadi data /angka hanya saya belum mencoba seandainya di beri randbetween (VBA) bila sekelilingnya kosong atau bila sekeliling nya sudah terisi angka --------> ada kemungkinan --- hasilnya akan lebih besar bila sekeliling nya sudah terisi angka ( ini cuma bayangan saya saja ---> yg belum saya buktikan / dan sulit untuk dibuktikan dadu --- angkanya yg nga menetu salam Lukman 2014-10-05 12:34 GMT+07:00 'Mr. Kid' [email protected] [belajar-excel] < [email protected]>: > > > ;) > > Sepertinya simulasinya ndak serumit itu deh. Malah mungkin bisa ndak pake > loop terlalu banyak. > tapi itu hanya mungkin loh ya... lah wong yang dilihat cuman script nya > pak Lukman dan ndak tahu asumsi atau bahkan kriteria pokok lainnya dari > alur proses. > > Wassalam, > Kid. > > > > 2014-10-02 2:09 GMT+10:00 lkm jktind [email protected] [belajar-excel] < > [email protected]>: > > >> >> Pak Kid. >> >> seperti ini : >> Sub Input_Summary2() >> Dim shR, shS, shM, shO, sh1, shM2 As Worksheet >> Dim rng1, rng2, rng3 As Range >> Dim r, c, t, w As Long >> Dim psa, psn, pkg, wkg As Long >> Dim va1, va2, va3 As Long >> Dim dbl As Double >> Set shS = Worksheets("Simulasi Aktual") >> Set shM = Worksheets("MonteCarlo") >> Set shR = Worksheets("Random") >> Set shO = Worksheets("OUTPUT") >> Set sh1 = Worksheets("Sheet1") >> Set shM2 = Worksheets("MonteCarlo2") >> Set rng1 = Worksheets("Random").Range("I2:J1001") >> Set rng2 = Worksheets("Random").Range("W2:X101") >> Set rng3 = Worksheets("Random").Range("T2:U101") >> '---- aktif sheet >> shM2.Activate >> >> Range("B10:C610").ClearContents >> Range("E10:I610").ClearContents >> Range("K10:K610").ClearContents >> Range("M10:O610").ClearContents >> Range("K1:N1").ClearContents >> dbl = Timer >> Cells(1, 13).Value = Time >> Cells(1, 6).Value = "Sumary2" >> >> 'ini buat copy randbetween >> Range("AP11:AP610").Copy >> Range("J11:J610").PasteSpecial xlValue >> Application.CutCopyMode = False >> Range("AR11:AR610").Copy >> Range("L11:L610").PasteSpecial xlValue >> Application.CutCopyMode = False >> Cells(11, 2).Select >> >> Application.Calculation = xlCalculationAutomatic >> 'Application.Calculation = xlCalculationManual >> Application.ScreenUpdating = False >> >> psa = shS.Cells(9, 2) >> 'psa = shM.Cells(100, 7) >> With Application.WorksheetFunction >> 'For C=3 to 8 >> For c = 3 To 3 >> 'For r =7 to 29 >> For r = 7 To 7 >> Range("H11:I3511").ClearContents >> psn = shO.Cells(r, 2) >> pkg = shO.Cells(6, c) >> 'For t = 11 to 3510 >> >> For t = 11 To 610 >> Cells(t, 2).Value = psa >> ' Cells(t, 4).Value = .RandBetween(1, 1000) >> >> If Cells(t, 4) > 0 Then >> Cells(t, 5).Value = .VLookup(Cells(t, 4), rng1, 2, False) >> End If >> >> If (Cells(t, 2) + Cells(t, 3)) < Cells(t, 5) Then >> Cells(t, 6).Value = (Cells(t, 5) - Cells(t, 3) - Cells(t, 2)) >> * Cells(6, 3) >> End If >> >> psa = Cells(t, 2) + Cells(t, 3) - Cells(t, 5) >> Cells(t, 7).Value = psa >> >> If Cells(t, 7).Value < psn Then >> Cells(t, 8).Value = "Pesan" >> Cells(t, 9).Value = pkg >> ' Cells(t, 10).Value = .RandBetween(1, 100) >> ' Cells(t, 12).Value = .RandBetween(1, 100) >> '===================== >> Cells(t, 11).Value = .VLookup(Cells(t, 10), rng2, 2, False) >> w = Cells(t, 11).Value + t >> Cells(t, 15).Value = w >> wkg = Cells(w, 3).Value >> Cells(w, 3).Value = wkg + pkg >> Cells(t, 13).Value = .VLookup(Cells(t, 12), rng3, 2, False) >> '======================= >> >> ElseIf Cells(t, 7) > psn Then >> ' Cells(t, 8).Value = "" >> ' Cells(t, 9).Value = 0 >> Cells(t, 10).Value = 0 >> ' Cells(t, 11).Value = 0 >> Cells(t, 12).Value = 0 >> ' Cells(t, 13).Value = 0 >> End If >> >> ' If Cells(t, 10) = 0 Then >> ' ElseIf Cells(t, 10) > 0 Then >> ' Cells(t, 11).Value = .VLookup(Cells(t, 10), rng2, 2, False) >> ' w = Cells(t, 11).Value + t >> ' Cells(t, 21).Value = w >> ' wkg = Cells(w, 3).Value >> ' Cells(w, 3).Value = wkg + pkg >> ' End If >> >> ' If Cells(t, 12) > 0 Then >> ' Cells(t, 13).Value = .VLookup(Cells(t, 12), rng3, 2, False) >> ' End If >> >> If Cells(t, 9) = 0 Then >> Cells(t, 14).Value = (Cells(t, 3) * Cells(5, 3)) + >> Cells(t, 6) + (Cells(t, 7) * Cells(3, 3)) >> ElseIf Cells(t, 9) > 0 Then >> Cells(t, 14).Value = (Cells(t, 9) * Cells(t, 13)) + >> (Cells(t, 3) * Cells(5, 3)) _ >> + Cells(t, 6) + (Cells(t, 7) * Cells(3, >> 3)) + Cells(4, 3) >> End If >> >> Next t >> Cells(t, 14).Value = .Sum(Range(Cells(11, 14), Cells(t, 14))) >> shO.Cells(r, c).Value = shM2.Cells(t, 14) >> Next r >> Next c >> End With >> Application.ScreenUpdating = True >> >> ' MsgBox "Proses Selesai", vbInformation >> >> dbl = Timer - dbl >> Cells(1, 11).Value = dbl >> Cells(1, 14).Value = Time >> End Sub >> >> ini yg pertama ---- dari percobaan kedua. >> >> dibawah ini : yg kedua dari percobaan kedua. >> bedanya untuk randbetween dan vlookup --- saya ambil dari sebelah >> kanannya. >> >> If Cells(t, 27).Value < psn Then >> Cells(t, 28).Value = "Pesan" >> Cells(t, 29).Value = pkg >> ' Cells(t, 30).Value = .RandBetween(1, 100) >> ' Cells(t, 32).Value = .RandBetween(1, 100) >> Cells(t, 30).Value = Cells(t, 30).Offset(0, 12) >> Cells(t, 31).Value = Cells(t, 31).Offset(0, 12) >> Cells(t, 32).Value = Cells(t, 32).Offset(0, 12) >> Cells(t, 33).Value = Cells(t, 33).Offset(0, 12) >> w = Cells(t, 31).Value + t >> Cells(t, 35).Value = w >> >> >> ElseIf Cells(t, 27) > psn Then >> ' Cells(t, 28).Value = "" >> ' Cells(t, 29).Value = 0 >> ' Cells(t, 30).Value = 0 >> ' Cells(t, 31).Value = 0 >> ' Cells(t, 32).Value = 0 >> ' Cells(t, 33).Value = 0 >> End If >> >> -------------> hasil percobaan kedua dari kedua --- lebih lambat . >> sampai setengah putus asa. >> >> baru saya coba ganti >> Application.Calculation = xlCalculationAutomatic >> Application.ScreenUpdating = False >> >> ' kan cuma ada 4 kemungkinan saja . >> >> ternyata yg sebelumnya hanya di kasih >> Application.Calculation = xlCalculationAutomatic ------> menjadi : manual >> -------- hasil nya nga pakai lama . >> >> setelah selesai ----------- saya masukan formula xl biasa ---------- dan >> ternyata hasil nya sama . >> didalam nya terkandung ------------ nilai total per baris . >> dan ada ginian . >> If t = 11 Then >> Cells(t, 2).Value = psa >> ElseIf t > 11 Then >> Cells(t, 2).Value = Cells(t - 1, 7) >> End If >> --------------------------- >> dibawah ini percobaan yg pertma. >> >> Sub Input_Summary1() >> Dim shR, shS, shM, shO, sh1 As Worksheet >> Dim rng1, rng2, rng3 As Range >> Dim r, c, t, w As Long >> Dim psa, psn, pkg, wkg As Long >> Dim has1, has2 As Variant >> Dim va1, va2, va3 As Long >> Dim dbl As Double >> Set shS = Worksheets("Simulasi Aktual") >> Set shM = Worksheets("MonteCarlo") >> Set shR = Worksheets("Random") >> Set shO = Worksheets("OUTPUT") >> Set sh1 = Worksheets("Sheet1") >> Set rng1 = Worksheets("Random").Range("I2:J1001") >> Set rng2 = Worksheets("Random").Range("W2:X101") >> Set rng3 = Worksheets("Random").Range("T2:U101") >> shM.Activate >> dbl = Timer >> Cells(1, 13).Value = Time >> 'Application.Calculation = xlCalculationAutomatic >> Application.Calculation = xlCalculationManual >> Application.ScreenUpdating = False >> >> Range("B10:O3500").ClearContents >> >> psa = shS.Cells(9, 2) >> 'psa = shM.Cells(100, 7) >> With Application.WorksheetFunction >> >> 'For c = 3 To 8 >> For c = 3 To 3 >> 'For r = 7 To 29 >> For r = 7 To 8 >> >> psn = shO.Cells(r, 2) >> pkg = shO.Cells(6, c) >> >> 'For t = 11 to 3495 >> For t = 11 To 3495 >> Cells(t, 4).Value = .RandBetween(1, 1000) >> Cells(t, 10).Value = .RandBetween(1, 100) >> Cells(t, 12).Value = .RandBetween(1, 100) >> >> >> If t = 11 Then >> Cells(t, 2).Value = psa >> ElseIf t > 11 Then >> Cells(t, 2).Value = Cells(t - 1, 7) >> End If >> >> >> If Cells(t, 4) > 0 Then >> Cells(t, 5).Value = .VLookup(Cells(t, 4), rng1, 2, False) >> End If >> >> If (Cells(t, 2) + Cells(t, 3)) < Cells(t, 5) Then >> Cells(t, 6).Value = (Cells(t, 5) - Cells(t, 3) - Cells(t, 2)) >> * Cells(6, 3) >> End If >> Cells(t, 7).Value = Cells(t, 2) + Cells(t, 3) - Cells(t, 5) >> If Cells(t, 7).Value < psn Then >> Cells(t, 8).Value = "Pesan" >> Cells(t, 9).Value = pkg >> >> ElseIf Cells(t, 7) > psn Then >> Cells(t, 8).Value = "" >> Cells(t, 9).Value = 0 >> Cells(t, 10).Value = 0 >> Cells(t, 11).Value = 0 >> Cells(t, 12).Value = 0 >> Cells(t, 13).Value = 0 >> End If >> >> If Cells(t, 7) > psn Then >> >> ElseIf Cells(t, 7) <= psn Then >> Cells(t, 11).Value = .VLookup(Cells(t, 10), rng2, 2, False) >> w = Cells(t, 11).Value + t >> Cells(t, 15).Value = w >> wkg = Cells(w, 3).Value >> If w <= 3495 Then >> Cells(w, 3).Value = wkg + pkg >> End If >> End If >> >> If Cells(t, 12) > 0 Then >> Cells(t, 13).Value = .VLookup(Cells(t, 12), rng3, 2, False) >> End If >> >> If Cells(t, 9) = 0 Then >> Cells(t, 14).Value = (Cells(t, 3) * Cells(5, 3)) + >> Cells(t, 6) + (Cells(t, 7) * Cells(3, 3)) >> ElseIf Cells(t, 9) > 0 Then >> Cells(t, 14).Value = (Cells(t, 9) * Cells(t, 13)) + >> (Cells(t, 3) * Cells(5, 3)) _ >> + Cells(t, 6) + (Cells(t, 7) * Cells(3, >> 3)) + Cells(4, 3) >> End If >> has2 = has2 + Cells(t, 14) >> If t = 3495 Then >> has1 = .Sum(Range(Cells(11, 14), Cells(t, 14))) >> Cells(3496, 14).Value = .Sum(Range(Cells(11, 14), Cells(t, >> 14))) >> shO.Cells(r, c).Value = Cells(3496, 14) >> End If >> >> Next t >> shO.Cells(r + 28, c).Value = has2 >> has1 = 0 >> has2 = 0 >> Next r >> Next c >> End With >> Application.ScreenUpdating = True >> >> ' MsgBox "Proses Selesai", vbInformation >> Application.Calculation = xlCalculationAutomatic >> dbl = Timer - dbl >> Cells(1, 11).Value = dbl >> Cells(1, 14).Value = Time >> End Sub >> >> ------------ disitu full VBA. >> cuma masih ada yg aneh . >> >> bila di running terlalu cepat : >> yg ini jadi kacau balau : >> w = Cells(t, 11).Value + t >> Cells(t, 15).Value = w >> wkg = Cells(w, 3).Value >> If w <= 3495 Then >> Cells(w, 3).Value = wkg + pkg >> >> Kalau step by step --- normal. >> >> seandai saya buat bikin range : inputan dari nilai w itu >> Cells(t, 15).Value = w >> maka saya akan mengunakan sumifs >> dan yg dibawah ini tidak di perlukan lagi >> If w <= 3495 Then >> Cells(w, 3).Value = wkg + pkg >> >> Salam >> >> >> Lukman >> >> >> >> 2014-10-01 20:37 GMT+07:00 'Mr. Kid' [email protected] [belajar-excel] < >> [email protected]>: >> >> >>> >>> :) >>> >>> Saya ndak tahu dalam cell ada yang menggunakan fungsi randbetween atau >>> ndak. Poin pentingnya, setting kalkulasi manual atau automatic tidak akan >>> mengubah sifat fungsi RandBetween. Jika fungsi ini dipakai dalam sebuah >>> cell alias di cell tersebut berisi formula berbunyi =Randbetween( bla , bli >>> ) ataupun fungsi-fungsi yang bersifat volatile lainnya, maka cell tersebut >>> akan berubah nilainya begitu setting kalkulasi dikembalikan menjadi >>> automatic. >>> >>> Secara umum, cerita proses yang berkaitan dengan cell berfungsi volatile >>> seperti RandBetween adalah sebagai berikut : >>> > jika di cell 1 diberi fungsi RandBetween : (di cell 1 ada formula >>> berbunyi =RandBetween( bla , bli ) >>> a. Nilai cell 1 awal adalah x1, >>> b. VBA mengubah setting kalkulasi ke manual, >>> c. VBA hitung berdasar nilai hasil cell 1, yaitu nilai x1 >>> d. VBA tulis hasil hitungannya ke sebuah cell 2, >>> e. VBA mengubah setting kalkulasi ke automatic lagi, >>> f. nilai di cell 1 sudah berubah menjadi x2 yang kemungkinan besar >>> x1<>x2 >>> >>> > jika di cell 1 *tidak ada* fungsi randbetween : (di cell 1 berisi >>> nilai konstan atau malah masih kosong) >>> a. VBA mengubah setting kalkulasi ke manual, >>> b. VBA pasang formula di cell 1 berupa fungsi RandBetween (cell 1 >>> berisi formula randbetween jadinya) >>> c. Nilai cell 1 awal adalah x1 (saat kalkulasi set manual), >>> d. VBA hitung berdasar nilai hasil cell 1, yaitu nilai x1 >>> e. VBA tulis hasil hitungannya ke sebuah cell 2, >>> f. VBA mengubah setting kalkulasi ke automatic lagi, >>> g. nilai di cell 1 sudah berubah menjadi x2 yang kemungkinan besar >>> x1<>x2 >>> >>> > jika di cell 1 *tidak ada* fungsi randbetween dan semua proses >>> dilakukan di dalam VBA (malah ndak perlu set kalkulasi ke manual) >>> a. VBA tulis ke cell 1 hasil worksheetfunction randbetween >>> b. VBA ambil nilai dari cell 1, misal bernilai x1 >>> c. VBA hitung berdasar nilai cell 1, yaitu nilai x1 >>> d. VBA tulis hasil hitungannya ke sebuah cell 2, >>> e. nilai di cell 1 tetaplah x1 >>> >>> Wassalam, >>> Kid. >>> >>> >>> >>> 2014-10-01 20:57 GMT+10:00 lkm jktind [email protected] >>> [belajar-excel] <[email protected]>: >>> >>> >>>> >>>> Pak Kid. >>>> >>>> Terima kasih. >>>> >>>> sudah kutemukan masalahnya . >>>> ternyata didalam VBA ada : Application.Calculation = >>>> xlCalculationAutomatic >>>> kacau. >>>> >>>> Hasilnya : >>>> dengan formula tetap menempel di work sheet , dan pakai automatic : >>>> 7.338 detik >>>> dengan formula tetap menempel di work sheet , dan dicentang automatic >>>> : 635 detik --- di excel - posisi manual >>>> dengan formula full di VBA Application.Calculation = >>>> xlCalculationManual : beberapa detik saja. >>>> (dibawah 2 detik) ---- sebanding dengan cpu usage nya dipakai semua >>>> . >>>> >>>> dengan data 3495 ---- bila ini di loop lagi 23 X 6 --- masih nga ada >>>> artinya. >>>> >>>> mungkin harus saya biasakan . --- sebelum masuk ke perhitungan dengan >>>> full VBA . >>>> Application.Calculation = xlCalculationManual. >>>> >>>> menjelang akhir baru di beri : >>>> Application.Calculation = xlCalculationAutomatic >>>> >>>> sedangkan : screen up to dating --- true atau false . ---selisih >>>> waktunya beda dikit saja. >>>> >>>> telah saya cross check : hasil dari full vba --------- lalu saya input >>>> formula dari excel . >>>> kecuali randbetween --- yg tidak di ganggu ------. dan hasil >>>> akhirnya sama . >>>> boleh kah saya artikan : bahwa formula yg saya gunakan di VBA --- >>>> sudah sesuai dengan di excel . >>>> >>>> >>>> >>>> Salam >>>> >>>> >>>> Lukman >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> 2014-10-01 3:41 GMT+07:00 'Mr. Kid' [email protected] [belajar-excel] >>>> <[email protected]>: >>>> >>>> >>>>> >>>>> Pak Lukman, >>>>> >>>>> Semua fitur Excel ketika digunakan dalam VBA, akan bekerja lebih >>>>> lamban, karena dibutuhkan proses eksekusi baris script VBA. >>>>> Untuk lama proses sampai 1700 detik pada iterasi yang sangat banyak >>>>> (lebih dari 500K step iterasi) mungkin terhitung wajar. Untuk terasi >>>>> dibawah 500K, berarti ada yang kurang pas antara otomasi dengan sistem >>>>> simulasinya. Penjelasan sistem simulasi lengkap beserta dasar teori >>>>> pemilihan komponen simulasinya perlu diketahui lebih dahulu sebelum >>>>> menyusun otomasinya. >>>>> >>>>> Diemail Anda dikatakan ada penggunaan RandBetween dan vLookUp. Maka >>>>> harus dipertanyakan lebih dulu, apakah simulasinya akan membentuk langsung >>>>> 1 dataset (series waktu) sekaligus atau satu per satu setiap waktu sampai >>>>> seluruh dataset terbentuk. Maksudnya, harus digenerate langsung dari >>>>> tanggal ke-1 sampai tanggal ke-1000 atau tanggal ke-1 selesai lalu muncul >>>>> tanggal ke-2 dst sampai tanggal ke-1000. >>>>> >>>>> Kondisi yang mungkin : >>>>> A. Jika menggunakan randbetween, berarti tanggal ke-1 sampai tanggal >>>>> ke-1000 langsung terbentuk bilangan acak dan bagian lain (kolom lain) pun >>>>> harus bekerja simultan langsung mengolah bersamaan dari tanggal ke-1 >>>>> sampai >>>>> ke-1000. Artinya, yang paling memungkinkan adalah memasang formula dalam >>>>> worksheet bukan menghitung formula dengan VBA. >>>>> >>>>> B. Jika yang dimaksud adalah tanggal ke-1 selesai disimulasi lalu >>>>> pindah ke tanggal ke-2 lalu disimulasi sampai tanggal ke-1000, >>>>> maka : >>>>> 1. jika ada proses untuk menggunakan hasil sebuah cell yang sama untuk >>>>> lebih dari satu proses simulasi. >>>>> >> proses otomasinya menggunakan loop dari satu tanggal ke tanggal >>>>> berikutnya. >>>>> 2. jika tidak ada proses untuk menggunakan hasil sebuah cell yang sama >>>>> untuk lebih dari satu proses simulasi >>>>> >> proses otomasi bisa menggunakan VBA atau dengan formula dalam >>>>> worksheet >>>>> >>>>> Kalo ndak salah kira-kira, jika kondisi A disusun dengan baik, >>>>> mestinya proses membutuhkan waktu sekitar 30 sampai 350 detik saja untuk >>>>> data kurang dari 30K. Jika kondisi B, maka proses VBA membutuhkan waktu >>>>> sekitar 30 sampai 350 detik juga pada data kurang dari 30K. Sedang untuk >>>>> penggunaan formula di kondisi B.2., bisa tergantung jumlah formula dalam >>>>> workbook yang butuh dikalkulasi Excel (antrian dalam proses kalkulasi >>>>> Excel). >>>>> >>>>> Wassalam, >>>>> Kid. >>>>> >>>>> >>>>> >>>>> 2014-09-30 20:47 GMT+10:00 lkm jktind [email protected] >>>>> [belajar-excel] <[email protected]>: >>>>> >>>>> >>>>>> >>>>>> menggunakan data montecarlo >>>>>> >>>>>> 1. sebagian besar formula menempel di work sheet. >>>>>> 2. semuanya mengunakan VBA -- --(mengunakan vlookup dan randbtween >>>>>> -- masing 3 pasang) >>>>>> >>>>>> dengan hasil >>>>>> 1. 7000 detik -- cpu usage = 25 % >>>>>> 2 .12.000 detik . ---> cpu useage = maksimal >>>>>> >>>>>> apakah bisa di artikan . formula di vba --- akan lebih lamban dari >>>>>> pada di work sheet ? >>>>>> >>>>>> >>>>>> Salam >>>>>> >>>>>> Lukman >>>>>> >>>>>> >>>>> >>>> >>> >> > >

