Jadi sebaiknya harus merubah coding saya dong. Apabila lihat funsgi vba-excel pakai object browser atau di help misal untuk fungsi:
Function FileLen(PathName As String) As Long Hasilnya adalah long. Padahal kalo dipikir-pikir apakah ada nama folder yang panjangnya 2147483647 (batas atas data type long). Tanya #1 : Apakah ini adalah salah satu cara agar prosesnya lebih cepat? Sekalian tanya masalah alokasi memori: Saya pernah mengolah data pengukuran pasang surut air laut untuk menentukan prediksi pasang surut dengan menggunakan aplikasi fungsi matrix. Saya tulis di http://cadex.wordpress.com/2009/12/18/xls-svy-01-prediksi-pasut-dengan-vba-e xcel/ Dalam proses perhitungan tersebut akan dibuat matrix dengan dimensi matrix sbb: MatrixA(696,19),MatrixL(696),MatrixX(19) Semuanya saya definisikan sebagai data type double di bagian declaration Dim MatrixA() as double, MatrixL() as double ,MatrixX() as double Tanya #2, Ada saran bagaimana mengatur alokasi memorin untuk menyimpan matrix? Mungkin bagi sebagian computer akan berjalan lebih lambat atau lebih cepat dari laptop saya... Tanya #3, Pada saat mengolah data 'pasang surut' tersebut awalnya saya memakai fungsi matrix di excel: application.worksheetfunction.MMULT() dan .MINVERSE() tetapi hasilnya error, mungkin karena fungsi di excel tidak bisa menghandle dimensi matrix dimensi 696x696. apakah memang demikian? Terimakasih _zainul_ ________________________________________ From: [email protected] [mailto:[email protected]] On Behalf Of Mr. Kid Sent: Sunday, February 28, 2010 12:04 PM To: [email protected] Subject: Re: [belajar-excel] kenapa INT((204.01 - 204) * 100) <> 1 ? Untungnya, ini berbicara dalam VBA Excel. Jadi, bisa dengan asumsi bahwa pengolahan tersebut (sebagian besar) adalah proses ETL untuk mendapatkan data yang dibutuhkan. Betul mas Zainul, Long dan Integer memiliki sifat yang sama sebagai datatype bilangan bulat, dan itu hanyalah sebuah kebiasaan saya saja. Ceritanya begini : Untuk suatu data yang jumlah cacahnya banyak dan harus disimpan oleh variabel itu dalam waktu lama (misal array bilangan bulat), maka sangat penting memperhatikan datatype berdasar alokasi memorinya. Tetapi untuk kasus sebuah variabel yang hanya menyimpan sesaat (misal suatu loop atau proses hitungan tertentu), maka tentunya yang diperhatikan adalah performance proses itu sendiri bukan alokasi memorinya, karena besar alokasi memori selalu tetap. Sedangkan untuk sistem operasi berbasis x86 (32 bit), proses dikerjakan selalu berdasar hitungan 32 bit. Datatype Long membutuhkan alokasi memori 4 byte (32 bit) jadi proses kerja tidak perlu mengkalkulasi luas memori, tinggal menuju ke ponter variabel itu, ambil seluruhnya. Jika pakai datatype Integer (2 byte = 16 bit), maka kerja akan menuju pointer tersebut, kalkulasi untuk ambil separo blok memori, baru dapat hasilnya. Kalau dengan komputer jaman sekarang tidak akan terasa bedanya, itu betul. Tapi tetap saja jumlah proses real yang dikerjakan komputer lebih sedikit dengan Long dibanding Integer. Kid. 2010/2/28 zainul ulum <[email protected]> Maturnuwun mas Kid, Bermanfaat sekali penjelasannya. Ceritanya begini, Saya sedang mengolah data hasil ukuran sudut dari alat total station (TS) yang dinyatakan dalam derajat, menit dan detik. Jika hasil pengukurannya adalah 204 derajat, 1 menit, 1 detik hasil download dari TS tertulis 204.0101 Jadi kalo data dari TS adalah 204.01, dibaca 204 derajat, 1 menit. Alasan kenapa saya memakai fungsi yang menghasilkan data type integer adalah mempertimbangkan bahwa hasil dari fungsi tersebut hanya dari angka 0 sampai 59. D = Int(DMS)'derajat DMS=Sudut dalam format d.mmss M = Int((DMS - D) * 100)'menit s = (DMS * 100 - Int(DMS * 100)) * 100'detik Dengan rumus di atas sebagian besar mendapatkan hasil yang saya harapkan, tetapi untuk sudut2 tertentu terjadi kesalahan. Misal untuk sudut 204.1 D=204 tetapi M=0 Kemudian saya ganti INT mejadi FIX, ternyata tetep aja M=0 Sebelum ada jawaban dari mas Kid, karena pusing mikirin INT dan FIX akhirnya rumus saya rubah menjadi, s = Format(absDMS, "000.000000") Der = CInt(Left(s, 3)) Men = CInt(Mid(s, 5, 2)) Det = CDbl(Mid(s, 7, 2)) + CDbl(Right(s, 2) / 100) Kini, saatnya menerapkan saran dari Mr.Kid Apakah akibatnya jika semua data type yang semula integer dirubah menjadi long (integer)? Karena setahu saya ada hubungannya dengan alokasi memory yang akan dipakai jika integer adalah 2 byte dengan range -32768 to 32767 Jika long adalah 4 byte dengan range -2147483648 to 2147483647 Mohon maaf kepanjangan ceritanya _zainul_ ________________________________________ From: [email protected] [mailto:[email protected]] On Behalf Of Mr. Kid Sent: Sunday, February 28, 2010 5:24 AM To: [email protected] Subject: Re: [belajar-excel] kenapa INT((204.01 - 204) * 100) <> 1 ? Hai mas Zainul, datatype double dan single adalah bilangan approximate dan diproses dengan algoritma yang berbeda dengan bilangan bulat seperti integer atau long. Jadi nilai desimal suatu bilangan akan tersusun dalam banyak angka dibelakang koma yang dibulatkan. Sedangkan fungsi Int() akan membulatkan ke terkecil terdekat. Alhasil, semua bilangan approximate (double dan single) akan dibulatkan ke nilai terkecil terdekat. Sedangkan 1 didefinisikan sebagai nilai approcimate berupa 0.99sekian Fungsi konversi datatype berbeda dengan fungsi pembulatan suatu angka seperti Int() Int(99.99) = 99 Int(-99.99) = -100 Cint(99.99)=100 Cint(-99.99)=-100 maksud dari syntax mas Zainul adalah memeriksa apakah selisihnya bernilai 1, maka kerjakanlah keduanya sebagai bilangan bulat, atau jadikanlah hasil akhir sebagai bilangan bulat silakan dicoba, agar punya gambaran yang lebih jelas clng((204.01-204) * 100) 204.01 * 100 mod 204*100 clng(204.01 * 100) - clng(204 * 100) Semoga bermanfaat. Kid. __________ Information from ESET NOD32 Antivirus, version of virus signature database 4901 (20100227) __________ The message was checked by ESET NOD32 Antivirus. http://www.eset.com

